系统属性
sun.jnu.encoding
的用途是什么?网络上的各种片段设置或报告它,但我找不到定义。
参见http://happygiraffe.net/blog/2009/09/24/java-platform-encoding/
此链接描述了
sun.jnu.encoding
属性的用法,以便在解析通过命令行传递的值时使用正确的编码,设置 file.encoding
属性不会产生影响。
我对编码进行了一些调查并根据我的分析
我尝试集中此处和网络上其他地方的答案中提供的所有信息,以便提供最完整的答案。
正如其他评论所指出的,实际上有两个属性会影响 JVM 上所选的编码:
sun.jnu.encoding
,也称为“平台编码”或“JNU 编码”,是一个未记录的、内部属性,它保存用于与平台交互的编码名称(例如,文件路径和) JNI C String 到 Java String 转换 — 也许还有 命令行参数、主类和环境变量,但我无法验证这一说法)。file.encoding
相同(除非 file.encoding
被覆盖,在这种情况下我不知道会发生什么),在 Windows 上,它可以各有不同。
file.encoding
,也称为“默认字符集”或“用户编码”,主要用于确定编码/解码文件contents的字符集。这是 java.nio.charsets.Charset.defaultCharset()
返回的字符集。请注意,许多 JDK API 使用 file.encoding
中的值作为默认编码,但可以通过在调用 JDK 方法时提供显式 Charset
或字符集名称来覆盖。
这些属性是在 JVM 启动时动态确定的(尽管 GraalVM Native Image 的情况并非如此,它在撰写本文时在构建时设置它们)。
最后,正如JEP 草案所述:
可以在命令行上覆盖这些系统属性的值,尽管从未支持这样做。
我认为这个值代表系统编码,在某些平台上可能与用户编码(“file.encoding”)不同。 “sun”前缀让我怀疑这是特定于 Sun JRE 的实现细节(快速查看 IBM 1.4 VM 会显示“ibm.system.encoding”系统属性)。我不知道如何在内部使用它 - 尽管我确信快速浏览一下源会产生一些线索。
hi body ,you can do that,
first,
#sudo systemctl edit jenkins.service
Environment="JAVA_OPTS=-Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8”
Environment="JAVA_TOOL_OPTIONS=-Dfile.encoding=utf8 -Dsun.jnu.encoding=UTF-8"
second,
#systemctl daemon-reload
# systemctl stop jenkins
# systemctl start jenkins