Java App:无法正确读取iso-8859-1编码的文件
我有一个编码为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/
但仍然无法正常工作
有趣的是,这在我的本地PC(xp)上有效,但在我的Linux机器上却无效。
我使用以下命令检查了我的jdk是否支持所需的字符集(它们是标准的字符集,因此这不是惊奇):
System.out.println(java.nio.charset.Charset.availableCharsets());
回答:
我怀疑您的文件 实际上 没有 被 编码为ISO-8859-1,或者System.out不知道如何打印字符。
我建议检查第一个,检查文件中的相关字节。要检查第二个字符,请检查字符串中的相关字符,并使用进行打印
System.out.println((int) s.getCharAt(index));
在这两种情况下,结果 都应 为244位十进制;0xf4十六进制。
请参阅我有关Unicode调试的文章以获取一般建议(所提供的代码是C#,但很容易转换为Java,原理相同)。
顺便说一句,通常,我会InputStreamReader
使用正确编码的来包装流-比“手动”创建新字符串要容易。我意识到这可能只是演示代码。
编辑:这是一种非常简单的方法来证明控制台是否可以工作:
System.out.println("Here's the character: \u00f4");
以上是 Java App:无法正确读取iso-8859-1编码的文件 的全部内容, 来源链接: utcz.com/qa/414720.html