sun.jnu.encoding究竟是什么?

时间:2009-07-01 01:08:13

标签: java encoding

系统属性sun.jnu.encoding的用途是什么?网上的各种片段设置或报告,但我找不到定义。

4 个答案:

答案 0 :(得分:28)

请参阅http://happygiraffe.net/blog/2009/09/24/java-platform-encoding/

此链接描述了sun.jnu.encoding属性在解析通过命令行传递的值时使用正确编码的用法,设置file.encoding属性不会影响。

答案 1 :(得分:12)

我根据我的分析对编码进行了一些调查

  1. sun.jnu.encoding影响文件名的创建(这可能在启动java之前由unix上的LANG设置)
  2. file.encoding会影响文件的内容

答案 2 :(得分:2)

我相信这个值代表系统编码,它可能与某些平台上的用户编码(“file.encoding”)不同。 “sun”前缀让我怀疑这是Sun JRE特有的实现细节(快速查看IBM 1.4 VM显示“ibm.system.encoding”系统属性)。我不知道如何在内部使用它 - 虽然我确信快速查看source会产生一些线索。

答案 3 :(得分:0)

我试图集中所有在此处和其他地方的答案中提供的信息,以尽可能提供最完整的答案。

正如其他注释所指出的,实际上有两个属性会影响JVM上选择的编码:

  • sun.jnu.encoding,也称为“平台编码”或“ JNU编码”,是未记录的internal属性,其中包含用于与平台交互的编码名称(例如file pathsJNI C String to Java String conversions-也许还有command-line arguments, main classes and environment variables,但我无法验证此声明)。

    MacOS上,它始终是UTF-8,在Linux上,它始终与file.encoding相同(除非覆盖了file.encoding,在这种情况下我不知道会发生什么) ,并且在Windows上可能会有所不同。

  • file.encoding,也称为“默认字符集”或“用户编码”,主要用于确定用于编码/解码文件 contents 的字符集。这是java.nio.charsets.Charset.defaultCharset()返回的字符集。请注意,file.encoding中的值被许多JDK API用作默认编码,但是可以通过在JDK方法的调用中提供显式的Charset或字符集名称来覆盖。

这些属性为determined dynamically when the JVM starts(尽管GraalVM本机映像不是这种情况,在撰写本文时为sets them at build time)。

最后,如this draft JEP所述:

尽管从未支持过,但是可以在命令行上覆盖这些系统属性的值。