【发布时间】:2010-11-03 15:00:15
【问题描述】:
UTF-8 是 Java 中的默认编码吗?
如果不是,我怎么知道默认使用哪种编码?
【问题讨论】:
标签: java encoding character-encoding jvm
UTF-8 是 Java 中的默认编码吗?
如果不是,我怎么知道默认使用哪种编码?
【问题讨论】:
标签: java encoding character-encoding jvm
JVM 的默认字符集是运行它的系统的字符集。这没有特定的值,您通常不应依赖默认编码是任何特定值。
可以在运行时通过Charset.defaultCharset() 访问它,如果这对您有任何用处,但实际上您应该指出始终明确指定编码。
【讨论】:
FileReader)。
Charset.defaultCharset() 源代码。它读取 file.encoding 属性,否则使用 UTF-8。
请注意,您可以使用名称容易混淆的属性file.encoding 更改 JVM 的默认编码。
如果您的应用程序对编码特别敏感(可能通过使用暗示默认编码的 API),那么您应该在 JVM 启动时将其显式设置为一致(已知)值。
【讨论】:
file.encoding 必须在 JVM 启动时指定(即作为命令行参数 -Dfile.encoding 或通过 JAVA_TOOLS_OPTIONS);您可以在运行时设置它,但这并不重要。见stackoverflow.com/questions/361975/…
共有三种“默认”编码:
file.encoding:System.getProperty("file.encoding")
java.nio.Charset:Charset.defaultCharset()
以及InputStreamReader的编码:InputStreamReader.getEncoding()
您可以在this page 上阅读更多相关信息。
【讨论】:
要获取默认的 java 设置,只需使用:
java -XshowSettings
【讨论】:
我确信这是特定于 JVM 实现的,但我能够通过执行“影响”我的 JVM 的默认 file.encoding:
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/
【讨论】:
file.encoding 属性。
file.encoding 的默认值是多少?根据sprops.encoding的值在java.lang.System.initProperties中初始化,其中sprops是本机函数GetJavaProperties()返回的结构体,其实现因平台而异。例如,在 Windows 版本中,它调用 GetUserDefaultLCID(),然后调用 GetLocaleInfo (lcid, LOCALE_IDEFAULTANSICODEPAGE, ...) 来查找用户的默认 ANSI 代码页并使用它。在 Unix 平台上,它解析 setlocale(LC_CTYPE, NULL) 的返回值。
您可以使用它来打印出 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
【讨论】:
它将取决于语言环境。不同的语言环境,不同的默认编码。
【讨论】: