Java JVM的默认编码是什么?
UTF-8是Java中的默认编码吗?Java JVM的默认编码是什么?,java,encoding,character-encoding,jvm,Java,Encoding,Character Encoding,Jvm,UTF-8是Java中的默认编码吗? 如果没有,我怎么知道默认情况下使用的是哪种编码?它将取决于语言环境。不同的语言环境,不同的默认编码。JVM的默认字符集是它运行的系统的字符集。这个没有特定的值,您通常不应该依赖默认编码作为任何特定的值 它可以在运行时通过Charset.defaultCharset()访问,如果这对您有任何用处的话,尽管您确实应该在可以这样做时始终明确指定编码。请注意,您可以使用名称混乱的属性file.encoding更改JVM的默认编码 如果您的应用程序对编码特别敏感(可能
如果没有,我怎么知道默认情况下使用的是哪种编码?它将取决于语言环境。不同的语言环境,不同的默认编码。JVM的默认字符集是它运行的系统的字符集。这个没有特定的值,您通常不应该依赖默认编码作为任何特定的值
它可以在运行时通过
Charset.defaultCharset()
访问,如果这对您有任何用处的话,尽管您确实应该在可以这样做时始终明确指定编码。请注意,您可以使用名称混乱的属性file.encoding
更改JVM的默认编码
如果您的应用程序对编码特别敏感(可能是通过使用暗示默认编码的API),那么您应该在JVM启动时将其显式设置为一致(已知)值。有三种“默认”编码:
- file.encoding:
System.getProperty(“file.encoding”)
- java.nio.Charset:
Charset.defaultCharset()
- 以及InputStreamReader的编码:
InputStreamReader.getEncoding()
您可以在上阅读更多信息。我确信这是特定于JVM实现的,但我能够“影响”我的JVM的默认文件。通过执行:
export LC_ALL=en_US.UTF-8
(在Ubuntu 12.04上运行java版本1.7.0_80)
另外,如果您在unix控制台中键入“locale”,您应该会在那里看到更多信息
所有的功劳都归您可以使用它来打印JVM默认值 编译并运行
要获取默认java设置,只需使用:
java -XshowSettings
请注意,必须在JVM启动时指定
file.encoding
(即作为cmdline参数-Dfile.encoding或通过JAVA_工具_选项);您可以在运行时设置它,但这并不重要。如果你是对的,我觉得有点奇怪,说它总是UTF-16。UTF-16是JVM内部表示文本的方式。默认编码确定JVM如何解释从文件读取的字节(例如,使用文件读取器
)。检查Charset.defaultCharset()
源代码。它读取file.encoding
属性,否则使用UTF-8。因此它取决于主机操作系统的编码方式?您是如何检查它的?我找不到证据证明Java对区域设置字符串中的编码有任何关注。仅来自file.encoding
属性。@ArtemNovikov-是,但是file.encoding
的默认值是什么?它在java.lang.System.initProperties
中根据sprops.encoding
的值进行初始化,其中sprops
是本机函数GetJavaProperties()
返回的结构,其实现因平台而异。例如,在Windows版本中,它调用GetUserDefaultLCID()
,然后调用GetLocaleInfo(lcid,LOCALE\u IDEFAULTANSICODEPAGE,…)
来查找用户的默认ANSI代码页并使用它。在Unix平台上,它解析setlocale(LC\u CTYPE,NULL)
的返回。。。。有关详细信息,请参阅和。
javac PrintCharSets.java && java PrintCharSets
java -XshowSettings