在Java中确定平台的默认字符集

Ana*_*man 8 java character-encoding

我用Java编程

我有以下代码:

byte[] b = test.getBytes();
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果它意味着操作系统编码,我该如何检查Windows和Linux的默认字符编码?反正我们可以使用命令行获取默认字符编码吗?

Bal*_*usC 32

系统属性file.encoding是特定于JVM供应商的.在这种特定情况下,它仅适用于Sun JVM,并且可能无法在Sun之外的其他供应商的JVM上运行.

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

Charset defaultCharset = Charset.defaultCharset();
Run Code Online (Sandbox Code Playgroud)

  • 这只是咬我.我正在调试一个eclipse项目,默认资源编码设置为UTF-8.看起来eclipse会自动将新运行(lauch)配置的JVM编码配置为与项目资源编码相同(在我的情况下为UTF-8).但我的开发机器OS(Win7)的编码是Cp1252.因此,只要我控制JVM供应商,我将使用"file.encoding"系统属性,并避免使用Charset.defaultCharset().顺便说一句,使用jdk 1.7.0_17(32位). (3认同)
  • 换句话说,目前接受的答案是完全错误的,提问者和回答者都应该感到羞耻. (3认同)

Jon*_*Jon 5

这表示您正在运行的JVM的默认字符编码,

要检查默认编码,您可以执行以下操作:

System.getProperty("file.encoding");
Run Code Online (Sandbox Code Playgroud)

这将返回默认编码(以及上面的getBytes()使用的编码)。

  • ...但是不要打扰。使用`String.getBytes()`的理由很少,当您使用它时,应该始终指定编码而不是依赖默认值。新的String(byte [])构造函数也是如此。 (3认同)