Liu*_*ian 8 java encoding internationalization character-encoding windows-7
我正在测试我的应用程序的i18n兼容性.我有一个英文版的Windows 7,这意味着系统的显示语言是英语.我将系统区域设置为非unicode应用程序的中文.
我的应用程序在导出jdk1.6下的中文字符的Html文件时遇到问题,但在jdk1.7下运行时工作正常.
我调试它,发现直接原因是Charset.defaultCharset()
返回了不同的值.
在jdk1.7下Charset.defaultCharset()
返回GBK
,这是中文的charset.
在jdk1.6下Charset.defaultCharset()
返回window_1252
,这是拉丁语的charset.
我知道问题可以通过utf-8
代码字符集来解决,比如代码.
但我想知道为什么Charset.defaultCharset()
在JDK1.7和JDK 1.6下返回不同的值.
Charset.defaultCharset()
给出了 JVM 运行的字符集,因此它并不总是相同的值。例如,如果您使用 Netbeans 运行程序,它将始终返回 UTF-8,因为这是 Netbeans 中 Java 项目的默认编码。
我有一个和你类似的设置。我的 Windows 是英语(菜单、对话框都是英语),我在非 Unicode 应用程序中使用土耳其语。当我在没有任何标志或系统参数的情况下启动 JVM 时,Java 7 和 Java 6 运行时在 Charset.defaultCharset()
调用时都会给出“CP1254”。System.getProperty("file.encoding")
和默认的IO编码也是一样的。(这两个 Java 版本中的系统区域设置不同,但那是另一回事了。)
所以我猜你的问题要么是如何启动 JVM,要么是 JVM 如何决定它应该使用的默认编码。如果您确定问题不是前一个问题(您在没有任何编码参数的情况下运行 JVM,并且您没有尝试更改程序中任何位置的默认字符集),那么 JVM 会错误地获取默认编码,这很可能是异常行为。
归档时间: |
|
查看次数: |
4367 次 |
最近记录: |