【发布时间】:2010-10-04 15:50:51
【问题描述】:
我有一个编码为 iso-8859-1 的文件,其中包含 ô 等字符。
我正在用 java 代码读取这个文件,类似于:
File in = new File("myfile.csv");
InputStream fr = new FileInputStream(in);
byte[] buffer = new byte[4096];
while (true) {
int byteCount = fr.read(buffer, 0, buffer.length);
if (byteCount <= 0) {
break;
}
String s = new String(buffer, 0, byteCount,"ISO-8859-1");
System.out.println(s);
}
但是 ô 字符总是乱码,通常打印为 ? .
我已经阅读了该主题(并在途中学到了一点),例如
- http://www.joelonsoftware.com/articles/Unicode.html
- http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
- http://www.ingrid.org/java/i18n/utf-16/
但仍然无法正常工作
有趣的是,这适用于我的本地电脑 (xp),但不适用于我的 linux 机器。
我已经检查了我的 jdk 是否支持所需的字符集(它们是标准的,所以这并不奇怪)使用:
System.out.println(java.nio.charset.Charset.availableCharsets());
【问题讨论】:
-
我应该补充一点,如果我只是 cat 文件的内容,我可以使用我的 linux 终端正确查看字符或原始文件
-
您的终端使用什么字符编码?
-
有趣的是——如果我添加运行时 java 属性“-Dfile.encoding=UTF16”,它会按预期工作,尽管我不明白这为什么重要——而且我不认为这是一个解决方案,但更多的是黑客。它不适用于设置为 UTF8 的属性。
标签: java encoding character-encoding iso-8859-1