Skip to main content
 首页 » 编程设计

java之为什么这个 Java 编码是 UTF-8 --> Latin1 错误

2024年05月22日131xing901022

我要下载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 集之前识别问题字符并进行字符串替换。