Кодировка cp1252
Когда я пробую следующее в Java:
System.out.println(System.getProperty("file.encoding"));
я получил cp1252
в качестве кодировки.
Есть ли способ узнать, откуда эта ценность? (Как переменные среды или что-то)
Я хотел бы напечатать значение кодировки в командной строке с помощью некоторой команды, например systeminfo в Windows XP.
5 ответов
cp1252 является кодировкой по умолчанию в английских установках MS Windows (то, что Microsoft называет ANSI). Java по умолчанию примет системную локаль в качестве кодировки символов по умолчанию. Что это означает, зависит от системы. В общем, я не люблю полагаться на кодировки по умолчанию. Если я знаю, что мой текст будет чистым ASCII, я его игнорирую - в противном случае я устанавливаю кодировку явно при создании экземпляра InputStreamReader
, OutputStreamWriter
, String
и т. д. getBytes
,
Обратите внимание, что cp1252 не является кодировкой по умолчанию в командной строке Windows. Это еще более старый cp437, который вы можете увидеть (и изменить), используя chcp
команда.
Это значение, по крайней мере в Windows, является устаревшей кодовой страницей, используемой для текста не в Юникоде. Это то, что ОС конвертирует строки в и из когда вы используете старые API ANSI. Для любой новой программы это не должно иметь никакого эффекта (к сожалению, я все еще вижу достаточно программ, которые используют A, а не W варианты API-функций, к сожалению).
Для вашей Java-программы все это не должно иметь значения, поскольку Java использует исключительно Unicode. Если вы хотите писать или читать текстовые файлы в системной кодовой странице, тогда вам это понадобится.
Однако для командной строки эта кодировка не имеет существенного значения, поскольку консоль по умолчанию использует кодировку OEM, которая имитирует одну из возрастов DOS (850 или 437 довольно распространено).
Поскольку это не имеет ничего общего с 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 ( некоторые ссылки в этом сообщении в блоге).
Насколько я обнаружил, это кодировка вашего исходного файла Java, ваш вывод изменится, как только вы измените кодировку его текстового файла. При затмении измените его в свойстве Resource (Alt+Enter или щелкните правой кнопкой мыши по этому файлу, перейдите в Resource). Измените кодировку текстового файла с cp1252 на что-то другое, скажем, UTF-8, вау... Ваш вывод больше не будет cp1252..
Я полагаю, что эта кодировка установлена JVM, поэтому не имеет смысла извлекать ее извне