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?的主要内容,如果未能解决你的问题,请参考以下文章