我要下载this UTF-8 文件并将其转换为 Java (Android) 中的 Latin1。在第 443 行,Frango-dâ~@~Y¡gua-menor
被翻译成 Frango-d?água-menor
而不是 Frango-d'água-主
。与第 465 行相同,其中 Descriçã£o fÃsicaâ~@¦
被翻译成 Descrição física?
,最后是讨厌的 ?
.
这个文件似乎不是有效的 UTF-8
?但是 iconv -f utf-8 -t iso-8859-1//TRANSLIT
在这个文件上工作得很好。
这是我用来下载的代码(下载的文件在infofile
):
fos = new FileOutputStream(infotxt);
out = new OutputStreamWriter(fos, 'Latin1');
fis = new FileInputStream(infofile);
br = new BufferedReader(new InputStreamReader(fis));
while ((line = br.readLine()) != null) {
out.write("\n"+line.trim());
}
br.close();
out.close();
fis.close();
fos.close();
最佳答案
您链接的文件是 UTF-8 编码的 HTML 文件,它使用 Latin-1 字符集之外的字符。例如。而不是您期望的 Latin-1 引号(Frango-d'água-menor
,使用代码 U+0027),它使用外观相似的右单引号 U+2019( Frango-d'água-menor
).这不是 Latin-1 集的一部分,因此您会得到一个替换问号。
由于 Latin-1 无法编码整个 Unicode 字符集,您必须接受这样的事情。
最好的机会是在写入有限的 Latin-1 集之前识别问题字符并进行字符串替换。
关于java - 为什么这个 Java 编码是 UTF-8 --> Latin1 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54010172/