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

标签 java android encoding

我要下载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/

相关文章:

java - 如何按内存位置对集合中的对象进行排序?

android - 在 firefox 或任何其他适用于 windows/桌面 linux 的浏览器中像 appstore 一样列出

r - Shiny 中出现意外输入错误,但无法定位错误源

java - java中的xml utf-8编码错误

ruby - 在 Ruby 中定义 String#prev 方法

java - 以下 json 的 java 中的 JsonPath 是什么

java - Apache CXF 中的 Web 服务错误

java - 如何在具有不同类型值的 Map 中使用泛型

android - 仅在没有 Jelly Bean 的小部件中使 setTextViewTextSize 崩溃

android - 自动打开 Android 文件的 Intent Chooser