JVM的默认编码是什么?

use*_*722 50 java encoding jvm character-encoding

UTF-8是Java中的默认编码吗?
如果没有,我怎么知道默认使用哪种编码?

And*_*yle 86

JVM的默认字符集是它运行的系统的字符集.对此没有具体的值,您通常不应该依赖于默认编码是任何特定值.

它可以在运行时通过Charset.defaultCharset(),如果这对你有用,但实际上你应该明确指出在你可以这样做时明确指定编码.

  • UTF-16是文本在JVM内部表示的方式.默认编码确定JVM如何解释从文件读取的字节(例如,使用`FileReader`). (34认同)
  • 这个答案是正确的,但作为参考,在Linux上它通常是"UTF-8",而在Windows上它通常是"cp1252". (7认同)
  • 如果你是对的我发现它有点奇怪http://java.sun.com/javase/technologies/core/basic/intl/faq.jsp#text-representation说它总是UTF-16. (6认同)

Bri*_*new 29

请注意,您可以使用容易混淆的属性更改JVM的默认编码file.encoding.

如果您的应用程序对编码特别敏感(可能通过使用暗示默认编码的API),那么您应该在JVM启动时将其明确设置为一致(已知)值.

  • 注意,必须在JVM启动时指定`file.encoding`(即作为cmdline参数-Dfile.encoding或通过JAVA_TOOLS_OPTIONS); 你可以在运行时设置它,但这没关系.请参阅http://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding (17认同)

mrc*_*htr 23

有三种"默认"编码:

  • 的file.encoding:
    System.getProperty("file.encoding")

  • java.nio.charset中:
    Charset.defaultCharset()

  • 和InputStreamReader的编码:
    InputStreamReader.getEncoding()

您可以在此页面上阅读更多相关信息.


小智 9

我确信这是特定于JVM的实现,但我能够通过执行以下方式"影响"我的JVM的默认文件.编码:

export LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

(在Ubuntu 12.04上运行java版本1.7.0_80)

此外,如果您从unix控制台键入"locale",您应该会在那里看到更多信息.

所有的功劳都归功于http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/

  • @ArtemNovikov - 是的,但是`file.encoding` 的默认值是多少?它根据`sprops.encoding`的值在`java.lang.System.initProperties`中初始化,其中`sprops`是原生函数`GetJavaProperties()`返回的结构体,其实现因平台而异。例如,在 Windows 版本中,它调用 `GetUserDefaultLCID()` 然后调用 `GetLocaleInfo (lcid, LOCALE_IDEFAULTANSICODEPAGE, ...)` 来查找用户的默认 ANSI 代码页并使用它。在 Unix 平台上,它解析 `setlocale(LC_CTYPE, NULL)` 的返回。 (3认同)

sdc*_*sdc 7

您可以使用它来打印出JVM默认值

import java.nio.charset.Charset;
import java.io.InputStreamReader;
import java.io.FileInputStream;

public class PrintCharSets {
        public static void main(String[] args) throws Exception {
                System.out.println("file.encoding=" + System.getProperty("file.encoding"));
                System.out.println("Charset.defaultCharset=" + Charset.defaultCharset());
                System.out.println("InputStreamReader.getEncoding=" + new InputStreamReader(new FileInputStream("./PrintCharSets.java")).getEncoding());
        }
}
Run Code Online (Sandbox Code Playgroud)

编译并运行

javac PrintCharSets.java && java PrintCharSets
Run Code Online (Sandbox Code Playgroud)


ska*_*man 6

它将依赖于语言环境.不同的语言环境,不同的默认编码.


小智 5

要获取默认的Java设置,只需使用:

java -XshowSettings 
Run Code Online (Sandbox Code Playgroud)