Путаница в инструменте Java native2ascii

Небольшая путаница в инструменте java native2ascii. Определение для инструмента в Java 6:

Преобразует файл с символами в собственном кодировке (символы, которые не являются латинскими 1 и не являются Unicode) в файл с символами в кодировке Unicode.

Тогда почему он также преобразует символы из таблицы Latin 1 (например, é) в представление в кодировке Unicode (\u00e9)???

Таблица латинского 1 (iso 8859-1) доступна здесь, например, http://en.wikipedia.org/wiki/ISO/IEC_8859-1

Это означает, что я не могу напрямую работать с файлами свойств для некоторых европейских языков, таких как французский.

Чтобы уточнить мой вопрос:

native2ascii не должен преобразовывать символы латинского алфавита (согласно его описанию). это действительный латинский символ. Поэтому, почему это преобразовано?

2 ответа

Вы можете работать с файлами свойств с французскими и другими символами. Свойства принимает \uxxxx последовательности. Вы можете работать с национальными символами напрямую, поскольку в свойствах есть метод load(Reader reader). Тогда файл может быть в любой кодировке, вы предоставите читателю, который правильно декодирует файл, например new InputStreamReader(new FileInputStream(1.properities), Charset.forName("ISO-8859-1"));

Я также согласен, что native2ascii не должен конвертировать é потому что это законный символ latin-1, а в документах говорится, что символы latin-1 не конвертируются.

Источником путаницы может быть то, что документация изменилась с версией 7 Java.

В Java 6 документация для Solaris и Unix ( http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/native2ascii.html) гласит: "Компилятор Java и другие инструменты Java могут обрабатывать только файлы которые содержат символы в кодировке Latin-1 и / или Unicode (\udddd нотация). native2ascii преобразует файлы, содержащие кодировки других символов, в файлы, содержащие символы в кодировке Latin-1 и / или Unicode. "

Я думаю, что это ясно означает, что на выходе будет Latin-1, а символы не на Latin-1 будут кодированы в Unicode.

Я проверил Openjdk 6 на Ubuntu и native2ascii там не соответствует документации, он выводит символы Latin-1 в кодировке Unicode. Таким образом, документация или инструмент native2ascii в этом случае могут считаться неверными.

Однако в Java 7 и Java 8 документация ( http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/native2ascii.html https://docs.oracle.com/javase/8/docs/technotes/tools/unix/native2ascii.html) говорит: "native2ascii преобразует файлы, закодированные в любую кодировку символов, поддерживаемую средой исполнения Java, в файлы, закодированные в ASCII, с использованием экранирования Unicode (нотация \uxxxx) для всех символы, которые не являются частью набора символов ASCII. "

Я проверил Openjdk 8 native2ascii на Ubuntu и обнаружил, что он работает соответствующим образом, он преобразует символы Latin-1 в кодировку Unicode.

Обратите внимание, что в документации 7/8 также упоминается "Этот процесс требуется для файлов свойств, содержащих символы, не входящие в наборы символов ISO-8859-1".

Я думаю, что это ясно означает, что файлы свойств, содержащие символы в кодировке Latin-1 (aka ISO-8859-1), по-прежнему действительны.

Другие вопросы по тегам