【问题标题】:Why ISO-8859-7 to UTF-8 encoding fails while the reverse is successful为什么 ISO-8859-7 到 UTF-8 编码失败而反向成功
【发布时间】:2015-06-04 20:12:17
【问题描述】:

好吧,我试图读取以 ISO-8859-7 编码的文本文件并将其保存在 UTF-8 中,反之亦然,因为该文本文件包含希腊语/拉丁文。我意识到这并不容易(如this question 所述)。

但我也注意到,当我读取以 UTF-8 编码的文本文件并尝试将其保存到 ISO-8859-7 时,它实际上可以正常工作(在文本文件中写入可读字符)。另一方面,当相反的情况成立时,读取 ISO-8859-7 并写入 UTF-8 则结果不是预期的。

那么,我的问题是为什么会发生上述情况?我知道我应该遵循question 中的方法,所以我不需要关于如何使编码工作的答案。是否与 UTF-8 定义的字符多于 ISO-8859-7 的事实有关?

我正在使用以下代码来完成此操作:

BufferedReader reader = BufferedReader(new InputStreamReader(new FileInputStream(file), encoding));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding));

其中encoding 只是代表编码的String

【问题讨论】:

    标签: java encoding utf-8


    【解决方案1】:

    您如何验证它是否有效?您是否检查了实际写入的字节以确保它们对预期字符进行编码?

    一个常见的错误是只使用命令行工具来查看内容——假设该工具知道实际编码,而不只是猜测它是一种特定的编码。具体来说,在您的情况下,它很可能只是默认使用 ISO-8859-7(或 -1)进行查看(或可能是 UTF-8),因此该工具错误地从字节中解码字符,给人以失败的印象。

    【讨论】:

    • 我实际上是通过在文本编辑器中检查失败/成功来检查它(具体来说是凯特)。不过我没有检查实际的字节数。
    • 好的。只是想提一下,因为它曾经咬过我。否则,是的,ISO 编码仅支持完整 Unicode 集中的 256 个字符,而 UTF-8 可以表达所有字符。但我假设您在文本中没有任何此类字符,如果是这样,转码应该可以工作。所以最有可能的解释仍然是使用的编码文件和解码器(Reader)用于解码的不匹配。
    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 2016-10-04
    • 1970-01-01
    • 2011-09-23
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多