Java 应用程序 : Unable to read iso-8859-1 encoded file correctly

标签 java encoding character-encoding 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);
}

但是 ô 字符总是乱码,通常打印为 ? .

我已经阅读了该主题(并在途中学到了一些东西),例如

但仍然无法正常工作

有趣的是,这适用于我的本地电脑 (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 十六进制。

参见 my article on Unicode debugging一般建议(提供的代码是 C#,但很容易转换为 Java,原理相同)。

一般来说,顺便说一句,我会使用具有正确编码的 InputStreamReader 包装流 - 这比“手动”创建新字符串更容易。我意识到这可能只是演示代码。

编辑:这里有一个非常简单的方法来证明控制台是否可以工作:

 System.out.println("Here's the character: \u00f4");

关于Java 应用程序 : Unable to read iso-8859-1 encoded file correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/498636/

相关文章:

encoding - 使用 PhpStorm/WinSCP 和 SFTP 的文件名编码错误

python - python appdata环境变量中的变音符号问题

ruby - 如何将 5 位二进制字符串转换为字母字符?

java - 通过插入 FormFeed 字符在文本文件中插入分页符。这是通用解决方案吗?

c - 请解释这个结果。 printf ("%c", 'abcd' )

JavaEE : Which is the good way to find an entity?

java - Eclipse 在尝试显示 rt.jar 中的类的 Javadoc 时超时

php - UTF8 到 CP1255 转换

java - 什么时候收集 perm gen?

java - Junit 保护方法