JVM 属性 -Dfile.encoding=UTF8 还是 UTF-8?

Posted

技术标签:

【中文标题】JVM 属性 -Dfile.encoding=UTF8 还是 UTF-8?【英文标题】:JVM property -Dfile.encoding=UTF8 or UTF-8? 【发布时间】:2011-08-27 06:36:21 【问题描述】:

我想知道将我的文件编码设置为 UTF-8 的 Java 虚拟机 (JVM) 属性的值是多少。

我是输入-Dfile.encoding=UTF8 还是-Dfile.encoding=UTF-8

【问题讨论】:

【参考方案1】:

会是:

UTF8

有关定义,请参阅here。

【讨论】:

其实我已经看过这个页面了。但是,我不知道必须使用“java.nio API 的规范名称”还是“java.io 和 java.lang API 的规范名称”中的哪一个。 两者都可以,但UTF-8 优于UTF8 - 唯一的标准格式。 使用 Spring Boot 时尝试“UTF-8”。它适用于我的情况。 这个答案说 UTF8 没有连字符 - 但是,这个答案的 cmets 建议使用连字符形式 UTF-8。不是很有帮助。 我在您的链接中看不到任何东西可以证明您的断言“它将是 UTF8”。您可以根据该文档轻松声明“它将是 UTF-8”。你能解释一下为什么指定“UTF8”吗?【参考方案2】:

UTF8 和 UTF-8 都适用于我。

【讨论】:

【参考方案3】:

如果在您的语言环境建议使用 UTF-8(例如 LANG=en_US.utf8)的 Linux 平台上运行 Oracle HotSpot JDK 1.7.x,如果您没有在命令行中使用 -Dfile.encoding 设置它,则JDK 会默认file.encoding 和默认Charset 像这样:

System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));

...产量:

file.encoding: UTF-8
defaultCharset: UTF-8

...建议在这样的平台上默认为UTF-8

此外,如果java.nio.charset.Charset.defaultCharset() 找到file.encoding 未设置,它会查找java.nio.charset.Charset.forName("UTF-8"),这表明它更喜欢该字符串,尽管它具有良好的别名,因此“UTF8”也可以正常工作。

如果您使用java -Dfile.encoding=UTF8 在同一平台上运行相同的程序,没有连字符,它会产生:

file.encoding: UTF8
defaultCharset: UTF-8

...注意默认字符集已从 UTF8 规范化为 UTF-8

【讨论】:

【参考方案4】:

这不是一个直接的答案,但如果您无法访问 java 的启动方式,这将非常有用:您可以将环境变量 JAVA_TOOLS_OPTIONS 设置为 -Dfile.encoding="UTF-8",并且每次 jvm 启动时都会选择该选项.

【讨论】:

【参考方案5】:

[INFO] BUILD SUCCESS Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 无论如何,它对我有用:)

【讨论】:

以上是关于JVM 属性 -Dfile.encoding=UTF8 还是 UTF-8?的主要内容,如果未能解决你的问题,请参考以下文章

01 对象的引用关系 VS 缓存

JVM虚拟机--深入理解Class中--方法属性表集合

Jvm(40),class文件结构----- 属性表集合(这里内容比较多,等jvm写完之后看这里还有什么补充的吗)

JVM虚拟机---深入理解Class中-属性集合

JVM参数简介

Pyspark UDF AttributeError:“NoneType”对象没有属性“_jvm”