Кодировка cp1252 - PullRequest
       24

Кодировка cp1252

5 голосов
/ 01 декабря 2009

Когда я пробую следующее в Java:

System.out.println(System.getProperty("file.encoding"));

Я получаю cp1252 в качестве кодировки.

Есть ли способ узнать, откуда исходит это значение? (Например, переменные окружения или что-то в этом роде)

Я хотел бы напечатать значение кодировки в командной строке с помощью некоторой команды, например systeminfo в Windows XP.

Ответы [ 5 ]

5 голосов
/ 01 декабря 2009

cp1252 - кодировка по умолчанию в английских установках MS Windows (то, что Microsoft называет ANSI). Java по умолчанию примет системную локаль в качестве кодировки символов по умолчанию. Что это означает, зависит от системы. В общем, я не люблю полагаться на кодировки по умолчанию. Если я знаю, что мой текст будет чистым ASCII, я его игнорирую - в противном случае я устанавливаю кодировку явно при создании экземпляров InputStreamReader, OutputStreamWriter, String и т. Д. Или при вызове getBytes.

Обратите внимание, что cp1252 является , а не кодировкой по умолчанию в командной строке Windows. Это еще более старый cp437, который вы можете увидеть (и изменить) с помощью команды chcp.

3 голосов
/ 01 декабря 2009

Это значение, по крайней мере в Windows, является устаревшей кодовой страницей, используемой для текста не в Юникоде. Это то, что ОС преобразует строки в и из когда вы используете старые API ANSI. Для любой более новой программы это должно не иметь никакого эффекта (при этом я все еще вижу достаточно программ, которые используют A, а не W варианты API-функций, к сожалению).

Для вашей Java-программы все это не должно иметь значения, поскольку Java использует исключительно Unicode. Если вы хотите писать или читать текстовые файлы на системной кодовой странице, тогда вам это понадобится.

Однако для командной строки эта кодировка не имеет существенного значения, поскольку консоль по умолчанию использует кодировку OEM, которая имитирует одну из возрастов DOS (850 или 437 довольно распространено).

1 голос
/ 01 декабря 2009

Поскольку это не имеет никакого отношения к Java, вы можете просто использовать сценарий WSH :

' save this script as printANSI.vbs
' usage: cscript /Nologo printANSI.vbs
Set objShell = CreateObject("WScript.Shell")
cp = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001" &_
                              "\Control\Nls\CodePage\ACP")
WScript.Echo cp

См. Также команду chcp; Вы можете прочитать о том, как работает кодирование в командной строке Windows ( некоторые ссылки в этом сообщении в блоге ).

0 голосов
/ 25 июля 2013

Насколько я обнаружил, это кодировка вашего исходного файла Java, ваш вывод изменится, как только вы измените кодировку его текстового файла. При затмении измените его в свойстве Resource (Alt + Enter или щелкните правой кнопкой мыши по этому файлу, перейдите в Resource). Измените кодировку текстового файла с cp1252 на что-то другое, скажем, UTF-8, woo ... Ваш вывод больше не будет cp1252 ..

0 голосов
/ 01 декабря 2009

Я считаю, что эта кодировка установлена ​​JVM, поэтому не имеет смысла извлекать ее извне

...