系统属性sun.jnu.encoding
的用途是什么?网上的各种片段设置或报告,但我找不到定义。
答案 0 :(得分:28)
请参阅http://happygiraffe.net/blog/2009/09/24/java-platform-encoding/
此链接描述了sun.jnu.encoding
属性在解析通过命令行传递的值时使用正确编码的用法,设置file.encoding
属性不会影响。
答案 1 :(得分:12)
我根据我的分析对编码进行了一些调查
答案 2 :(得分:2)
我相信这个值代表系统编码,它可能与某些平台上的用户编码(“file.encoding”)不同。 “sun”前缀让我怀疑这是Sun JRE特有的实现细节(快速查看IBM 1.4 VM显示“ibm.system.encoding”系统属性)。我不知道如何在内部使用它 - 虽然我确信快速查看source会产生一些线索。
答案 3 :(得分:0)
我试图集中所有在此处和其他地方的答案中提供的信息,以尽可能提供最完整的答案。
正如其他注释所指出的,实际上有两个属性会影响JVM上选择的编码:
sun.jnu.encoding
,也称为“平台编码”或“ JNU编码”,是未记录的internal属性,其中包含用于与平台交互的编码名称(例如file paths和JNI 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所述:
尽管从未支持过,但是可以在命令行上覆盖这些系统属性的值。