Как изменить кодировку из текста с расширенным ASCII, отличного от ISO, с терминаторами линии CRLF до UTF-8?

У меня есть txt-файл:

$ file -i x.txt x.txt: text/plain; charset=unknown-8bit $ file x.txt x.txt: Non-ISO extended-ASCII text, with CRLF line terminators 

И есть некоторые символы, которые неправильно закодированы:

 trwa³y, sta³y, usuwaæ 

Как я могу изменить кодировку этого файла на UTF-8? Я пробовал следующий путь:

 $ iconv -f ASCII -t UTF-8 x.txt puiconv: illegal input sequence at position 4 

Может быть, я должен каким-то образом использовать extended ASCII ( high ASCII ), но не могу найти его в списке кодировок iconv .

  • Обработка текста: замена строк в строке соответствующими строками
  • Лучшая вики-версия Linux с открытым исходным кодом с встроенной поддержкой аутентификации Windows (NTLM)
  • Как конвертировать .txt или .html файлы в multipages .DOCX файл?
  • Предотвращение разрывов в середине слова в a2ps
  • отображать имя файла, за которым следует контент без взаимодействия
  • Как я могу найти и установить pacman-color или справиться?
  • Важна ли последняя новая строка в fstab?
  • Определить новый символ строки в текстовом файле?
  • 4 Solutions collect form web for “Как изменить кодировку из текста с расширенным ASCII, отличного от ISO, с терминаторами линии CRLF до UTF-8?”

    file сообщает вам «Non-ISO extended-ASCII text», потому что он обнаруживает, что это:

    • скорее всего, «текстовый» файл из-за отсутствия управляющих символов (байтовые значения 0-31), отличные от разрывов строк;
    • «Extended-ASCII», потому что есть символы вне диапазона ASCII (байтовые значения ≥128);
    • «Non-ISO», потому что в диапазоне 128-159 есть символы ( ISO 8859 резервирует этот диапазон для управляющих символов).

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

     enca x.txt enca -L polish x.txt 

    Чтобы преобразовать файл, передайте параметр -x : enca -L polish x.txt -x utf8 >x.utf8.txt

    Если вы не можете или не хотите использовать Enca, вы можете угадать кодировку вручную. Немного оглядываясь, я сказал, что это польский текст, а слова trwały, stały, usuważ, поэтому мы ищем перевод, где ³ł и æż . Это выглядит как латинский-2 или латинский-10 или более вероятный (данный «не-ISO» CP1250, который вы просматриваете как latin1 . Чтобы преобразовать файл в UTF-8, вы можете использовать recode или iconv .

     recode CP1250..utf8 <x.txt >x.utf8.txt iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt 

    Вы пытались выяснить, какая именно кодировка – x.txt? Вы получите список поддерживаемых кодировок с

    iconv –list

    Иногда бывает так, что я получаю несоответствие между latin1 и utf8. Затем он часто помогает преобразовать его и обратно в utf8 и наоборот.

    Откройте текстовый файл с помощью gedit, а в диалоговом окне «save as …» вы увидите текущую кодировку.

    Я создал сценарий автоматического преобразования, используя библиотеку enca , я использую его на своем NAS для преобразования субтитров в UTF-8, но он может быть использован для любого автоматического преобразования

    Не стесняйтесь использовать 🙂

    РЕДАКТИРОВАТЬ:

     #!/bin/bash LANGUAGE=czech TO=utf8 CONVERT="enca -L $LANGUAGE -x $TO" # Find and onvert find ./ -type f -name "*.srt" | while read fn; do IS_TARGET=`enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European'` if [ "$IS_TARGET" != "UTF-8" ] && [ "$IS_TARGET" != "UCS-2" ] && [ "$IS_TARGET" != "Macintosh Central European" ] && [ "$IS_TARGET" != "Unrecognized" ] && [ "$IS_TARGET" != "7bit ASCII" ] && [ "$IS_TARGET" != "KOI8-CS2" ]; then echo "${fn} ---- Will be converted!" # optional backup of original srt # cp "${fn}" "${fn}.bak" $CONVERT "${fn}" fi done 
    Linux и Unix - лучшая ОС в мире.