Как преобразовать текстовый файл в кодировке Big5 в текстовый файл в кодировке UTF8?

#encoding #utf-8 #iconv #big5

#кодирование #utf-8 #iconv #big5

Вопрос:

У меня есть файл в кодировке Big5, который нельзя открыть с помощью Mac TextEdit. Интересно, как преобразовать весь файл в кодировку utf8, поскольку utf8 гораздо более универсален и распространен.

Я пытался использовать iconv в своем терминале, но он не работает. Я также не могу найти ничего полезного об этой ошибке в Google.

 $ iconv -f BIG5 -t UTF8 in.txt > out.txt
iconv: in.txt:5:0: cannot convert
  

Есть ли другие способы конвертации?

Я получил текстовый файл отсюда, который представляет собой список китайских имен, написанных на тайваньском традиционном китайском.

Комментарии:

1. Какой это был формат? Мне нужно прочитать этот точно такой же файл.

2. @SteveHanov Это кодировка Big5.

Ответ №1:

Глядя на первые 20 строк вашего файла, становится ясно, что кодировка использует байт 0x8C в качестве первого байта некоторых многобайтовых последовательностей. Кодировки, обладающие этим свойством, следующие:

  • BIG5
  • BIG5-HKSCS
  • CP932
  • CP936
  • CP949
  • CP950
  • GB18030
  • GBK
  • ДЖОХАБ
  • Shift_JIS
  • Shift_JISX0213

Попробуйте их по очереди:

 $ for encoding in BIG5 BIG5-HKSCS CP932 CP936 CP949 CP950 GB18030 GBK 
                  JOHAB Shift_JIS Shift_JISX0213; do 
  if head -n 20 < unique_names_2012.txt | iconv -f $encoding -t UTF-8 > /dev/null 2> /dev/null; then 
    echo $encoding ; 
  fi; 
done
  

С помощью GNU libiconv он печатает

 BIG5-HKSCS
CP950
GB18030
  

Это в кодировке GB18030?

 $ iconv -f GB18030 < unique_names_2012.txt
  

показывает сотни строк, в которых используются символы в диапазоне PUA. Хотя это и не невозможно, это кажется маловероятным.

Это в кодировке CP950?

 $ iconv -f CP950 < unique_names_2012.txt
  

выдает ошибку преобразования в строке 2294.

Это в кодировке BIG5-HKSCS?

 $ iconv -f BIG5-HKSCS < unique_names_2012.txt
  

выдает ошибку преобразования в строке 713.

Итак, скорее всего, файл закодирован в варианте BIG5. Существует много таких вариантов, см. http://haible.de/bruno/charsets/conversion-tables/Chinese.html . Возможно, это расширение CP950 или расширение BIG5-HKSCS (поскольку на сегодняшний день это самые популярные кодировки из семейства BIG5).

Таким образом, такие ошибки преобразования вызваны нестандартизированным распространением вариантов BIG5.

Лучшее, что вы можете сделать, это запросить исходный файл в кодировке UTF-8; пусть с этим разбирается создатель.

Комментарии:

1. Спасибо, это действительно очень помогает!