9

当我在 Java 中尝试以下操作时:

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

我得到cp1252了编码。

有没有办法知道这个值来自哪里?(比如环境变量什么的)

我想在 Windows XP 上使用诸如 systeminfo 之类的命令在命令提示符下打印编码的值。

4

5 回答 5

8

cp1252 是 MS Windows 英文安装的默认编码(微软称之为 ANSI)。默认情况下,Java 会将系统语言环境作为其默认字符编码。这意味着什么取决于系统。一般来说,我不喜欢依赖默认编码。如果我知道我的文本将是纯 ASCII,我会忽略它 - 否则我会在实例化 、 等或调用时InputStreamReader明确OutputStreamWriter设置String编码getBytes

请注意,cp1252不是Windows 命令提示符上的默认编码。那是更旧的 cp437,您可以使用chcp命令查看(和更改)它。

于 2009-12-01T15:39:54.987 回答
4

该值至少在 Windows 上是用于非 Unicode 文本的旧代码页。当您使用旧的 ANSI API 时,这就是操作系统在字符串之间相互转换的方式。对于任何较新的程序,它应该没有效果(也就是说,我仍然看到足够多的程序使用 API 函数的 A 而不是 W 变体,遗憾的是)。

对于您的 Java 程序来说,这些都不重要,因为 Java 只使用 Unicode。但是,如果您想在系统的代码页中写入或读取文本文件,那么您将需要它。

然而,对于命令提示符,该编码没有什么重要价值,因为控制台默认使用模仿 DOS 时代之一的 OEM 编码(850 或 437 很常见)。

于 2009-12-01T15:07:50.000 回答
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 命令提示符下的工作原理(此博客文章中的一些链接)。

于 2009-12-01T15:51:03.847 回答
1

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

于 2013-07-25T09:33:34.253 回答
0

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

于 2009-12-01T15:07:06.193 回答