小智 29
见http://happygiraffe.net/blog/2009/09/24/java-platform-encoding/
此链接描述了sun.jnu.encoding在解析通过命令行传递的值时使用正确编码的属性的用法,设置file.encoding属性不会影响.
sid*_*grl 13
我根据我的分析对编码进行了一些调查
我试图集中此处和网络上其他地方的答案中提供的所有信息,以便提供最完整的答案。
\n正如其他评论所指出的,实际上有两个属性会影响 JVM 上所选的编码:
\nsun.jnu.encoding,也称为“平台编码”或“JNU 编码”,是一个未记录的内部属性,它保存用于与平台交互的编码名称(例如文件路径和JNI C 字符串到 Java 字符串转换\xe2\ x80\x94 也许还有命令行参数、主类和环境变量,但我无法验证这一说法)。
\n\xe2\x80\x8b
\n在MacOS 上,这始终是 UTF-8,在Linux上它总是相同file.encoding(除非file.encoding被覆盖,在这种情况下我不知道会发生什么),在Windows上它可以各不相同。
file.encoding也称为“默认字符集”或“用户编码”,主要用于确定编码/解码文件内容的字符集。这是返回的字符集java.nio.charsets.Charset.defaultCharset()。file.encoding请注意,许多 JDK API 使用in 中的值作为默认编码,但可以通过Charset在调用 JDK 方法时提供显式名称或字符集名称来覆盖该值。
这些属性是在 JVM 启动时动态确定的(尽管 GraalVM Native Image 的情况并非如此,它在撰写本文时在构建时设置它们)。
\n最后,正如这份 JEP 草案所述:
\n\n\n可以在命令行上覆盖这些系统属性的值,尽管从未支持这样做。
\n