Файл с использованием многократной кодировки - PullRequest
2 голосов
/ 27 марта 2012

Я читаю текстовый файл, который, я думаю, закодирован в utf-8.Некоторые строки могут быть декодированы только как latin-1.Я бы сказал, что это очень плохая практика, но, тем не менее, я должен с этим справиться.

У меня есть следующие вопросы:

Во-первых: как я могу «угадать» кодировку файла?Я пробовал enca, но на моем компьютере:

enca --list languages
belarussian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U
  bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113
      czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
   estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic
   croatian: CP1250 ISO-8859-2 IBM852 macce CORK
  hungarian: ISO-8859-2 CP1250 IBM852 macce CORK
 lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
    latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
     polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK
    russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr
     slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
    slovene: ISO-8859-2 CP1250 IBM852 macce CORK
  ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr
    chinese: GBK BIG5 HZ
       none:

Этого недостаточно для обнаружения латино-1.Кстати: как я могу увеличить список доступных языков для enca?

Второе: можно ли частично закодировать файл в разных кодировках?Я думаю, что с технической точки зрения это очень возможно: просто используйте разные кодеки для разных частей файла.Вы когда-нибудь видели это?Как бы вы справились с чтением такого файла?Будете ли вы пытаться декодировать каждую строку с другой кодировкой?Как бы вы пошли об этом?Я на самом деле использую python, и пример обработки множественного кодирования был бы признателен.

В-третьих: как вы обычно относитесь к файлам, для которых вы не знаете кодировку, которую они используют?Я часто сталкиваюсь с этой проблемой при загрузке текстовых файлов из разных источников.Обычно это CSV-файлы, экспортируемые из электронных таблиц (я полагаю, в Excel), но в зависимости от параметров экспорта они используют ту или иную кодировку, без подсказок о том, какой из них был выбран, поэтому я вынужден угадать.

Ответы [ 2 ]

3 голосов
/ 27 марта 2012
  1. Угадай текст, кодирующий файл - в чем?Python, Perl, Java, C?Обратите внимание, что иногда это приводит к неожиданным результатам (например, ошибка "куст скрыл факты" )
  2. Иногда файл будет иметь кодированный текст в разных кодировках.Либо формат файла определяет разные кодировки для разных частей файла, либо формат позволяет указывать переключатель кодирования.Например, в MIME ключами заголовков являются ascii, значения заголовков могут иметь встроенные разделы, закодированные в других кодировках, а кодировка содержимого объявляется в заголовке Content-Type.
  3. Если вы не знаетекодирование, вам просто нужно прочитать байты из файла (в безопасном двоичном виде) в буфер, пока вы не сможете определить кодировку.
0 голосов
/ 27 марта 2012

Когда вы говорите «частично закодированы в разных кодировках», вы уверены, что это не просто UTF-8?UTF-8 смешивает однобайтовые, 2-байтовые и более байтовые кодировки, в зависимости от сложности символа, поэтому часть его выглядит как ASCII / latin-1, а часть выглядит как Unicode.

http://www.joelonsoftware.com/articles/Unicode.html

РЕДАКТИРОВАТЬ: чтобы угадать кодировки загруженных текстовых файлов, я обычно открываю их в Chrome или Firefox.Они поддерживают множество кодировок и очень хорошо выбирают правильную.Затем можно скопировать содержимое в файл в кодировке Unicode.

...