Java: кодировка платформы по умолчанию на разных платформах? - PullRequest
20 голосов
/ 16 февраля 2012

Некоторый устаревший код полагается на кодировку платформы по умолчанию для переводов. Для установок Windows и Linux в «западном мире» я знаю, что это значит. Но, думая о российских или азиатских платформах, я совершенно не уверен, какой кодировкой по умолчанию является их платформа (только UTF-16?).

Поэтому я хотел бы знать, что я получу при выполнении следующей строки кода:

System.out.println("Default Charset=" + Charset.defaultCharset());

Edit: Я не хочу обсуждать проблемы кодировок и их отличие от Unicode здесь. Я просто хочу собрать, какие операционные системы приведут к какой конкретной кодировке. Пожалуйста, оставляйте только конкретные значения!

Ответы [ 2 ]

25 голосов
/ 16 февраля 2012

Это пользовательская настройка. Во многих современных системах Linux это UTF-8. На Mac это MacRoman. В США для Windows это часто CP1250, в Европе - CP1252. В Китае вы часто найдете упрощенный китайский (Big5 или GB *).

Но это системное значение по умолчанию, которое каждый пользователь может изменить в любое время. Возможно, это решение: установите кодировку при запуске приложения, используя системное свойство file.encoding

Смотрите этот ответ как это сделать. Я предлагаю поместить это в небольшой скрипт, который запускает ваше приложение, чтобы пользователь по умолчанию не испортился.

7 голосов
/ 16 февраля 2012

Для установок Windows и Linux в «западном мире» я знаю, что это значит.

Вероятно, не так хорошо, как вы думаете.

Но, думая о российских или азиатских платформах, я совершенно не уверен, какой кодировкой по умолчанию для их платформ является

Обычно это то, что исторически используется в их стране.

(только UTF-16?).

Определенно нет. Использование компьютера широко распространилось до появления стандарта Unicode, и каждая языковая область разработала одну или несколько кодировок, которые могли бы поддерживать его язык. Те, кому требовалось менее 128 символов вне ASCII, обычно разрабатывали «расширенный ASCII», многие из которых в конечном итоге были стандартизированы как ISO-8859 , тогда как другие разработали двухбайтовые кодировки, часто несколько конкурирующих. Например, в Японии для электронной почты обычно используется JIS , но для веб-страниц используется Shift-JIS , а в некоторых приложениях используется EUC-JP . Любой из них может рассматриваться как кодировка платформы по умолчанию в Java.

Это огромный беспорядок, именно поэтому был разработан Unicode. Но беспорядок еще не исчез, и нам все еще приходится иметь дело с ним, и мы не должны делать какие-либо предположения о том, в какую кодировку входит данная группа байтов, которые должны интерпретироваться как текст. Нет такого понятия, как обычный текст .

...