3

когда я пытался узнать кодировку файла all.txt, используя

$ file all.txt

это показывает это сообщение

all.txt: Non-ISO extended-ASCII text, with very long lines

что это за кодирование текста расширенного ASCII не-ISO?

потому что мне нужно преобразовать его в другую кодировку, поэтому мне нужно знать кодировку этого файла

любая помощь?

2 ответа2

6

Это то, что не похоже ни на utf-8, ни на iso-8859-1. Это может быть что-нибудь еще. Это может даже не быть текстом вообще. Этот тип является своего рода запасным описанием для всего, что не содержит нулевых байтов.

Даже если это на самом деле текстовый файл (расширение предполагает, что это может быть), к сожалению, не существует автоматического способа узнать кодировку, потому что большинство кодировок имеют одинаковый диапазон допустимых кодов. Utf-8 может быть рассмотрен отдельно с очень высокой степенью достоверности, но помимо этого он требует ручной проверки.

Сначала вы должны выяснить, на каком языке находится файл, чтобы получить представление о том, что такое правильный контент и что такое искаженный контент, и получить список возможных кодировок. Потому что есть миллионы кодировок, но только несколько из них использовались для какого-либо конкретного языка.

Чем вам нужно попытаться преобразовать файл из каждой возможной кодировки, и для каждого технического преобразования, которое завершится технически (к сожалению, большинство из них), просмотрите результат и проверьте, является ли он правильным или нет.

Проверка орфографии может помочь вам с обзором, так как неправильные преобразования приведут к большему количеству ошибок проверки орфографии.

Для преобразования вы можете использовать iconv(1), который устанавливается из пакета libc в GNU/Linux или recode. recode имеет больше опций и лучшую обработку ошибок.

6

Это не вписывается в комментарий, так что вот так: у меня тоже был странный файл на руках:

$ file systeminfo.txt 
systeminfo.txt: Non-ISO extended-ASCII text

Я знал, что это было сгенерировано немецкой установкой WindowsXP и содержало некоторые умлауты, но iconv не смог преобразовать его в нечто разумное:

$ iconv -t UTF-8 systeminfo.txt > systeminfo_utf8.txt 
iconv: illegal input sequence at position 308

Но поскольку iconv знает так много кодирования, я использовал метод грубой силы, чтобы выяснить кодировку рабочего источника :

$ iconv --list | sed 's/\/\/$//' | sort > encodings.list
$ for a in `cat encodings.list`; do
  printf "$a  "
  iconv -f $a -t UTF-8 systeminfo.txt > /dev/null 2>&1 \
    && echo "ok: $a" || echo "fail: $a"
done | tee result.txt

Затем я бы просматривал result.txt и искал кодировку, которая не подвела. В моем случае -f CP850 -t UTF-8 работал просто отлично, и умлауты все еще там, только теперь закодированные в UTF-8 :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .