Я работаю над созданием файла, запрашивая данные из базы данных и использую его для создания файла, ситуация выглядит следующим образом: База данных: Oracle с кодировкой UTF8 Сервер приложений: Смола с кодировкой UTF8 Платформа приложений: NTT Intra-Mart (японская структура на основе на Rihno и с использованием javascript в качестве языка серверной программы) Необходимость: запрос данных из Oracle и создание файла с помощью кодировки [Shift-JIS], файл используется как промежуточный файл, который экспортируется одной системой и передается с помощью FTP в другую систему для импорта . Файл должен иметь фиксированный диапазон байтов, чтобы конечный сервер мог найти указанные данные для импорта: например, байт 1-10: [адрес пользователя] байт 11-20: [имя пользователя] Однако сначала я создаю файл с UTF8, кажется, все символы отображаются правильно, но когда я пытаюсь записать данные с кодировкой [SJIS], там некоторые полноширинные символы становятся вопросительными знаками половинной ширины [?], и это может привести к сокращению ширины байтов и невозможности правильного получения данных: например, когда данные [адрес пользователя], такие как: 1-10-1, данные в файле станут 1 × 10 × 1 байт 1-10: [адрес пользователя], но в текущем файле адрес пользователя - байты 1-8 байтов 11-20: [имя пользователя] не могли бы вы дать мне совет?
Как записать данные, созданные в кодировке UTF8, в файл как кодировку Shift-JIS без пропущенного символа
comment
Кодировка Shift-JIS не может представлять все кодовые точки, которые могут быть представлены UTF-8. UTF-8 может представлять весь диапазон кодовых точек Unicode.
- person Mark Tolonen   schedule 06.07.2020
Ответы (1)
Вам нужно будет использовать имя набора символов Windows-31J
, а не Shift-JIS
.
Данные 1-10-1
будут набраны из Microsoft IME. Microsoft IME использует U+FF0D
(ПОЛНАЯ ШИРИНА ДЕФИС-МИНУС) для представления символа -
.
U+FF0D
не сопоставляется ни с одним символом в сопоставлении Shift-JIS - Unicode в JavaVM. Таким образом, вы получите?
при преобразовании-
из внутреннего представления JVM (UTF-16) в Shift-JIS с кодировкойShift-JIS
.U+FF0D
отображается в0x817C
в Windows-31J - Unicode отображается в JavaVM. Таким образом, вы получите-
при преобразовании-
из внутреннего представления JVM (UTF-16) в Shift-JIS с кодировкойWindows-31J
.
person
SATO Yusuke
schedule
14.07.2020
Спасибо за совет, я общался с SE, и теперь мы отказались от способа чтения файла с указанными байтами и использования для этого CSV-файла.
- person auwind; 18.07.2020