Java 编码cp1252
当我在Java中尝试以下操作时:Java 编码cp1252,java,windows,encoding,cp1252,Java,Windows,Encoding,Cp1252,当我在Java中尝试以下操作时: System.out.println(System.getProperty(“file.encoding”) 我得到cp1252作为编码 有没有办法知道这个值是从哪里来的?(比如环境变量之类的) 我想在Windows XP上使用诸如systeminfo之类的命令在命令提示符下打印编码值。我认为此编码是由JVM设置的,因此从外部检索它没有意义。该值至少在Windows上是用于非Unicode文本的传统代码页。当您使用旧的ANSI API时,操作系统会将字符串转换成
System.out.println(System.getProperty(“file.encoding”)代码>
我得到cp1252
作为编码
有没有办法知道这个值是从哪里来的?(比如环境变量之类的)
我想在Windows XP上使用诸如systeminfo之类的命令在命令提示符下打印编码值。我认为此编码是由JVM设置的,因此从外部检索它没有意义。该值至少在Windows上是用于非Unicode文本的传统代码页。当您使用旧的ANSI API时,操作系统会将字符串转换成字符串。对于任何较新的程序,它都应该没有任何效果(尽管如此,我仍然看到足够多的程序使用A而不是W的API函数变体,很遗憾)
对于Java程序来说,这些都不重要,因为Java只使用Unicode。但是,如果您想在系统的代码页中写入或读取文本文件,则需要它
但是,对于命令提示符,该编码没有重要价值,因为控制台默认使用OEM编码,该编码模仿DOS时代(850或437非常常见)。cp1252是英文版MS Windows安装的默认编码(Microsoft称之为ANSI)。默认情况下,Java将使用系统语言环境作为其默认字符编码。这意味着依赖于系统。一般来说,我不喜欢依赖默认编码。如果我知道我的文本将是纯ASCII,我将忽略它-否则我在实例化InputStreamReader
、OutputStreamWriter
、String
等或调用getBytes
时会显式设置编码
请注意,cp1252不是Windows命令提示符上的默认编码。这是更旧的cp437,您可以使用chcp
命令查看(并更改)它。由于这与Java没有任何关系,您可以选择使用脚本:
另请参见chcp
命令;您可能想了解Windows命令提示符()上的编码工作原理。据我所知,这是java源文件的编码,一旦更改其文本文件编码,您的输出将更改。
在eclipse上,从Resource属性更改它(Alt+Enter或右键单击该文件,转到Resource)。
将文本文件编码从cp1252更改为其他格式,例如UTF-8,woo。。。您的输出将不再是cp1252 不,不是,这是命令行工具的Windows编码Skico:不是,不是。命令行上使用的代码页是另一个。可能相关信息仅供参考,在widows代码页1252上有一些信息
' 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