gpt4 book ai didi

java - Charset.defaultCharset() 在 JDK1.7 和 JDK 1.6 下得到不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:46 25 4
gpt4 key购买 nike

我正在测试我的应用程序的国际化兼容性。我有英文版的Windows 7,这意味着系统的显示语言是英文。对于非 unicode 应用程序,我将系统区域设置为中文。

我的应用程序在jdk1.6下导出带有汉字的Html文件时遇到问题,但在jdk1.7下运行正常。

调试了一下,发现直接原因是Charset.defaultCharset()返回的值不一样。

在jdk1.7下Charset.defaultCharset()返回的是GBK是中文的charset。

在 jdk1.6 下 Charset.defaultCharset() 返回 window_1252 是拉丁语的字符集。

我知道这个问题可以通过在代码中指定字符集来解决,比如 utf-8

但我想知道为什么 Charset.defaultCharset() 在 JDK1.7 和 JDK 1.6 下返回不同的值。

最佳答案

Charset.defaultCharset() 给出了JVM运行的charset,所以并不总是相同的值。例如,如果您使用 Netbeans 运行程序,它将始终返回 UTF-8,因为这是 Netbeans 中 Java 项目的默认编码。

我的设置和你的类似。我的 Windows 是英文的(菜单、对话框是英文的),我对非 Unicode 应用程序使用土耳其语。当我在没有任何标志或系统参数的情况下启动 JVM 时,调用 Charset.defaultCharset() 时,Java 7 和 Java 6 运行时都会给出“CP1254”。 System.getProperty("file.encoding") 和默认的IO编码也是一样的。 (这两个 Java 版本的系统语言环境不同,但这是另一回事。)

所以我猜你的问题要么是关于你如何启动你的 JVM,要么是关于 JVM 如何决定它应该使用的默认编码。如果您确定问题不是前一个问题(您在没有任何编码参数的情况下运行 JVM,并且您没有尝试更改程序中任何地方的默认字符集),那么 JVM 会错误地获取默认编码,这很可能是异常行为。

关于java - Charset.defaultCharset() 在 JDK1.7 和 JDK 1.6 下得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com