2010-04-20 43 views
7

我用Java编程在Java中确定平台的默认字符集

我的代码为:

byte[] b = test.getBytes(); 

在api中指定如果我们不指定字符编码,则采用默认的平台字符编码。

“默认平台字符编码”是什么意思?

这是指Java编码还是操作系统编码?

如果它意味着OS编码,我该如何检查Windows和Linux的默认字符编码?无论如何我们可以使用命令行获取默认字符编码?

+0

您应该明确说明您的意思。从你想要的信息开始。 – 2010-04-20 17:58:09

+0

如果你找不到你以前问过的问题,只需点击任何地方你的名字就像这里的链接:[Anand](http://stackoverflow.com/users/226906/anand)和顶部栏。你可以在那里找到问题,你几乎没有接受的问题(注意:问题遍布在网页上!)。再次审查它们并投票/接受一些。 – BalusC 2010-04-20 18:39:21

回答

3

这意味着你正在运行的JVM的默认字符编码,

要检查编码你可以做默认以下:

System.getProperty("file.encoding"); 

,将返回的默认编码(和上面的getBytes()使用的那个)。

+2

...但不要打扰。使用'String.getBytes()'有很少的正当理由,当你使用它时,你应该总是指定一个编码,而不是依赖于默认值。 'new String(byte [])'构造函数也是如此。 – 2010-04-20 19:40:55

28

系统属性file.encoding是JVM供应商特定的。在这种特定情况下,它仅适用于Sun JVM,并且它可能不适用于Sun以外的其他供应商的JVM。

而是使用Java SE API提供的Charset#defaultCharset()

Charset defaultCharset = Charset.defaultCharset(); 
+2

这只是咬了我。我正在调试默认资源编码设置为UTF-8的eclipse项目。看起来eclipse自动将新运行(lauch)配置的JVM编码配置为与项目资源编码(在我的情况下为UTF-8)相同。但我的开发机器OS(Win7)的编码是Cp1252。所以,只要我控制JVM供应商,我将使用“file.encoding”系统属性,并避免Charset.defaultCharset()。顺便使用jdk 1.7.0_17(32位)。 – Zalumon 2013-06-26 12:28:15

+0

我对之前的评论做出结论。我刚刚注意到,在上面描述的场景中,“file.encoding”也是UTF-8。现在我完全不知道如何弄清真正的操作系统编码。 – Zalumon 2013-06-26 12:33:23

+0

BalusC!非常感谢你在这个社区的辛勤工作。你是我的个人英雄。无论如何,你有一个官方文档的URL来描述'file.encoding'属性吗? – 2014-10-04 09:06:38