【问题标题】:Encoding cp1252编码 cp1252
【发布时间】:2010-12-22 01:22:20
【问题描述】:
当我在 Java 中尝试以下操作时:
System.out.println(System.getProperty("file.encoding"));
我得到cp1252 作为编码。
有没有办法知道这个值来自哪里? (比如环境变量什么的)
我想在 Windows XP 上使用 systeminfo 之类的命令在命令提示符上打印编码值。
【问题讨论】:
标签:
java
windows
encoding
cp1252
【解决方案1】:
据我所知,这是你的 java 源文件的编码,一旦你改变它的文本文件编码,你的输出就会改变。
在 Eclipse 上,从 Resource 属性更改它(Alt+Enter 或右键单击该文件,转到 Resource)。
将文本文件编码从 cp1252 更改为其他编码,比如 UTF-8,哇...您的输出将不再是 cp1252..
【解决方案2】:
由于这与 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】:
至少在 Windows 上,该值是用于非 Unicode 文本的旧代码页。当您使用旧的 ANSI API 时,这就是操作系统在字符串之间相互转换的方式。对于任何较新的程序,它应该没有任何效果(话虽如此,但遗憾的是,我仍然看到足够多的程序使用 API 函数的 A 而不是 W 变体)。
对于您的 Java 程序来说,这些都不重要,因为 Java 只使用 Unicode。但是,如果您想在系统的代码页中写入或读取文本文件,那么您将需要它。
但是,对于命令提示符,该编码没有什么重要价值,因为默认情况下,控制台使用模仿 DOS 时代之一的 OEM 编码(850 或 437 很常见)。
【解决方案4】:
cp1252 是 MS Windows 英文安装的默认编码(微软称之为 ANSI)。默认情况下,Java 会将系统语言环境作为其默认字符编码。这意味着什么取决于系统。一般来说,我不喜欢依赖默认编码。如果我知道我的文本将是纯 ASCII,我会忽略它 - 否则我会在实例化 InputStreamReader、OutputStreamWriter、String 等或调用 getBytes 时明确设置编码。
请注意,cp1252 不是 Windows 命令提示符上的默认编码。那是更旧的 cp437,您可以使用 chcp 命令查看(和更改)它。
【解决方案5】:
我相信这个编码是由 JVM 设置的,所以从外部检索它是没有意义的