当我在Java中尝试以下内容时:
System.out.println(System.getProperty("file.encoding"));
我得到cp1252
作为编码。
有没有办法知道这个值来自哪里? (像环境variables或其他东西)
我想打印在命令提示符上使用一些命令,如Windows XP上的systeminfo的编码值。
cp1252是英文MS Windows安装(微软称为ANSI)的默认编码。 Java默认情况下会将系统区域设置作为其默认字符编码。 这意味着系统依赖。 一般来说,我不喜欢依靠默认的编码。 如果我知道我的文本将是纯粹的ASCII我忽略它 – 否则我实例化InputStreamReader
, OutputStreamWriter
, String
等或调用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设置的,所以从外部检索它是没有意义的