Java 为什么ISO-8859-7到UTF-8编码失败而反向编码成功

Java 为什么ISO-8859-7到UTF-8编码失败而反向编码成功,java,encoding,utf-8,Java,Encoding,Utf 8,嗯,我试图读取一个用ISO-8859-7编码的文本文件,并用UTF-8保存它,或者反之亦然,因为该文本文件包含希腊语/拉丁语文本。我意识到这并不容易(如中所述) 但我也注意到,当我读取以UTF-8编码的文本文件并尝试将其保存到ISO-8859-7时,它实际上可以正常工作(在文本文件中写入可读字符)。另一方面,当相反的情况为真时,读取ISO-8859-7并写入UTF-8,则结果不是预期的结果 那么,我的问题是为什么会出现上述情况?我知道我应该遵循中的方法,所以我不需要关于如何使编码工作的答案。这是

嗯,我试图读取一个用ISO-8859-7编码的文本文件,并用UTF-8保存它,或者反之亦然,因为该文本文件包含希腊语/拉丁语文本。我意识到这并不容易(如中所述)

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

那么,我的问题是为什么会出现上述情况?我知道我应该遵循中的方法,所以我不需要关于如何使编码工作的答案。这是否与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
只是一个表示编码的
字符串。

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


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

我实际上通过在文本编辑器中检查失败/成功(具体来说是凯特)。但是我没有检查实际的字节。好的。我只是想提一下,因为它以前咬过我。否则,是的,ISO编码只支持完整Unicode集中的256个字符,而UTF-8可以表示所有字符。但我假设文本中没有任何这样的字符,如果是这样,转码应该可以正常工作。因此,最可能的解释仍然是编码文件使用的内容与解码器(读取器)用于解码的内容不匹配。