编码cp1252

时间:2009-12-01 15:03:47

标签: java windows encoding cp1252

当我在Java中尝试以下内容时:

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

我将cp1252作为编码。

有没有办法知道这个价值来自哪里? (比如环境变量或其他东西)

我想在Windows XP上使用systeminfo等命令在命令提示符下打印编码值。

5 个答案:

答案 0 :(得分:5)

cp1252是MS Windows英文版安装的默认编码(Microsoft称为ANSI)。默认情况下,Java会将系统区域设置作为其默认字符编码。这意味着系统依赖。一般来说,我不喜欢依赖默认编码。如果我知道我的文本将是纯ASCII,我会忽略它 - 否则我在实例化InputStreamReaderOutputStreamWriterString等或调用getBytes时明确设置编码。

请注意,在Windows命令提示符下,cp1252 是默认编码。这是更老的cp437,您可以使用chcp命令查看(和更改)。

答案 1 :(得分:3)

至少在Windows上,该值是用于非Unicode文本的遗留代码页。这是操作系统在使用旧的ANSI API时将字符串转换为来源的内容。对于任何较新的程序,它应该没有效果(可以说,我仍然看到足够的程序使用A而不是API函数的W变种,遗憾的是)。

对于Java Java程序,这一点都不重要,因为Java只使用Unicode。如果你想在系统的代码页中写或读文本文件,那么你就需要它。

但是,对于命令提示符,该编码没有重要价值,因为默认情况下控制台使用模仿其中一个DOS年龄的OEM编码(850或437非常常见)。

答案 2 :(得分:1)

由于这与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命令提示符(some links in this blog post)上的编码方式。

答案 3 :(得分:0)

据我所知,这是您的java源文件的编码,一旦您更改其文本文件编码,您的输出将会更改。 在eclipse上,从Resource属性更改它(Alt + Enter或右键单击该文件,转到Resource)。 将文本文件编码从cp1252更改为其他内容,比如UTF-8,woo ...您的输出将不再是cp1252 ..

答案 4 :(得分:-1)

我相信这个编码是由JVM设置的,因此从外部检索它是没有意义的