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

回到顶部