当我在Java中尝试执行以下操作时:
System.out.println(System.getProperty("file.encoding"));
我将cp1252作为编码。
有没有办法知道这个值来自哪里?(比如环境变量或其他东西)
我想在命令提示符上使用一些命令打印编码的值,比如Windows XP上的systeminfo。
发布于 2009-12-01 23:39:55
cp1252是MS Windows英文安装的默认编码(微软称之为ANSI)。缺省情况下,Java将采用系统区域设置作为其缺省字符编码。这意味着什么取决于系统。一般来说,我不喜欢依赖默认编码。如果我知道我的文本将是纯ASCII码,我会忽略它-否则,我会在实例化InputStreamReader、OutputStreamWriter、String等或调用getBytes时显式设置编码。
请注意,cp1252不是Windows命令提示符上的默认编码。这是更老的cp437,您可以使用chcp命令查看(和更改)它。
发布于 2009-12-01 23:07:50
至少在Windows上,该值是用于非Unicode文本的旧代码页。当您使用旧的ANSI时,它是操作系统在字符串和字符串之间进行转换的地方。对于任何较新的程序,它应该没有任何影响(也就是说,我仍然看到足够多的程序使用API函数的A而不是W变体,遗憾的是)。
对于Java程序来说,这些都无关紧要,因为Java只使用Unicode。但是,如果您想在系统的代码页中写入或读取文本文件,那么您将需要它。
然而,对于命令提示符来说,这种编码没有什么意义,因为控制台默认情况下使用OEM编码,它模仿DOS的年龄之一(850或437是很常见的)。
发布于 2009-12-01 23:51:04
由于这实际上与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)上阅读有关编码的工作原理。
https://stackoverflow.com/questions/1826771
复制相似问题