Кодировка Java для японских символов - PullRequest
2 голосов
/ 03 марта 2011

У меня есть имя файла с японскими символами.имя файла: S-最終条件.pdf.В Java имя файла: S-最終条件.pdf.

// Support for Japanese file name
fileNameX = new String(fileName.getBytes("Shift_JIS"),"ISO8859_1");

Выход fileNameX выходит S?最終条件.pdf.Следовательно это бросает ошибку.Я пытаюсь опередить файл в формате PDF, но определенный японский символ "-" не распознается и выдает ошибку при потоковой передаче.

Пожалуйста, помогите мне решить эту проблему.
Спасибо, Прасанна

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Давайте посмотрим, что на самом деле делает ваш код:

//Assign to bytes the UTF-16 String fileName Encoded in Shift_JIS
//bytes now contains the binary Shift_JIS representation of your String
final byte[] bytes = fileName.getBytes("Shift_JIS");

//Create a new String UTF-16 by interpreting bytes as ISO8859_1
//Takes the Shift_JIS encoded bytes and interprets it as ISO8859_1
new String(bytes,"ISO8859_1");

Строки Java используют UTF-16 для внутреннего представления.Вы не можете указать целевую кодировку при создании строки, так как UTF-16 исправлен, вы должны указать правильную исходную кодировку, которая является «Shift_JIS» для байтового массива.

fileNameX должен отображаться правильно без преобразования.

0 голосов
/ 03 марта 2011

Это проблема сопоставления как кода Shift_JIS, так и Unicode.Shift_JIS не имеет всех символов Unicode, поэтому некоторые символы становятся «?».

Ниже приведен результат преобразования из Unicode в Shift_JIS.

RESULT  UNICODE
[NG]    U+2012 (FIGURE DASH)
[NG]    U+2013 (EN DASH)
<OK>    U+2014 (EM DASH)
[NG]    U+2015 (HORIZONTAL BAR)
<OK>    U+2212 (MINUS SIGN)
[NG]    U+FF0D (FULLWIDTH HYPHEN-MINUS)

Одним из решений является замена кода.

U+2012,U+2013,U+2015 --> U+2014
U+FF0D               --> U+2212
...