【问题标题】: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,我会忽略它 - 否则我会在实例化 InputStreamReaderOutputStreamWriterString 等或调用 getBytes 时明确设置编码。

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 不,不是,这是命令行工具的 Windows 编码
          • 奇科:不是,不是。命令行上使用的代码页是不同的。
          猜你喜欢
          • 1970-01-01
          • 2014-07-22
          • 2021-06-14
          • 1970-01-01
          • 2017-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多