编码cp1252

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

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

我得到cp1252作为编码

有没有办法知道这个值来自哪里? (像环境variables或其他东西)

我想打印在命令提示符上使用一些命令,如Windows XP上的systeminfo的编码值。

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

请注意,cp1252 不是 Windows命令提示符处的默认编码。 这是更古老的cp437,你可以看到(和改变)使用chcp命令。

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

对于Java程序来说,没有什么关系,因为Java只使用Unicode。 如果您想在系统的代码页中编写或读取文本文件,那么您将需要它。

但是,对于命令提示符来说,该编码没有任何重要价值,因为控制台默认使用模拟DOS年龄(850或437很常见)的OEM编码。

由于这与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源文件的编码,你的输出将改变一旦你改变其文本文件的编码。 在eclipse上,将其从资源属性(Alt + Enter或右键单击该文件,转到资源)更改。 改变文本文件编码从cp1252到别的东西,说UTF-8,呜…你的输出将不再是cp1252 ..

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