Почему эта кодировка Java UTF-8 -> Latin1 неверна? - PullRequest
0 голосов
/ 02 января 2019

Я хочу загрузить этот файл UTF-8 и преобразовать его в Latin1 в Java (Android). В строке 443 Frango-dâ~@~Yágua-menor переводится в Frango-d?água-menor вместо Frango-d'água-menor. То же самое в строке 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();

1 Ответ

0 голосов
/ 02 января 2019

Связанный вами файл является HTML-файлом в кодировке UTF-8, и в нем используются символы, не входящие в набор символов Latin-1. Например. вместо ожидаемой кавычки Latin-1 (Frango-d'água-menor, использующей код U + 0027) используется аналогичная правая одинарная кавычка U + 2019 (Frango-d’água-menor). Это не часть набора Latin-1, поэтому вы получите вопросительный знак для замены.

Поскольку Latin-1 не может кодировать весь набор символов Unicode, вы должны принять такие вещи.

Ваш лучший шанс - определить проблемные символы и выполнить замену строки перед записью в ограниченный набор Latin-1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...