JVM的默认编码是什么?

时间:2009-06-17 10:37:58

标签: java encoding character-encoding jvm

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

7 个答案:

答案 0 :(得分:85)

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

可以在运行时通过Charset.defaultCharset()访问它,如果这对你有用,不过你应该明确指出总是明确指定编码

答案 1 :(得分:27)

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

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

答案 2 :(得分:22)

有三种“默认”编码:

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

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

  • InputStreamReader的编码:
    InputStreamReader.getEncoding()

您可以在this page上了解更多相关信息。

答案 3 :(得分:7)

我确信这是特定于JVM的实现,但我能够通过执行来“影响”我的JVM的默认文件。编码:

export LC_ALL=en_US.UTF-8

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

另外,如果您从unix控制台输入“locale”,那么您应该会看到更多信息。

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

答案 4 :(得分:6)

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

答案 5 :(得分:5)

您可以使用它来打印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());
        }
}

编译并运行

javac PrintCharSets.java && java PrintCharSets

答案 6 :(得分:2)

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

java -XshowSettings