it-swarm.com.de

Wie ändere ich die Codierung von Nicht-ISO-Extended-ASCII-Text mit CRLF-Zeilenabschlüssen auf UTF-8?

Ich habe eine txt-Datei:

$ 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

Und es gibt einige Zeichen, die falsch codiert sind:

trwa³y, sta³y, usuwaæ

Wie kann ich die Codierung dieser Datei in UTF-8 ändern? Ich habe bisher folgendes versucht:

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

Vielleicht sollte ich irgendwie extended ASCII (high ASCII) Verwenden, kann es aber nicht in der Codierungsliste von iconv finden.

22
Patryk

file sagt Ihnen "Extended-ASCII-Text ohne ISO", weil es erkennt, dass dies ist:

  • höchstwahrscheinlich eine „Text“ -Datei aufgrund fehlender Steuerzeichen (Bytewerte 0–31) außer Zeilenumbrüchen;
  • "Extended-ASCII", da Zeichen außerhalb des Bereichs ASCII) liegen (Bytewerte ≥128);
  • „Nicht-ISO“, da sich Zeichen im Bereich von 128 bis 159 befinden ( ISO 8859 reserviert diesen Bereich für Steuerzeichen).

Sie müssen herausfinden, in welcher Codierung sich diese Datei befindet. Sie können die automatische Erkennung von Enca ausprobieren. Möglicherweise müssen Sie es in die richtige Richtung bewegen, indem Sie ihm mitteilen, in welcher Sprache der Text ist.

enca x.txt
enca -L polish x.txt

Übergeben Sie zum Konvertieren der Datei -x Möglichkeit: enca -L polish x.txt -x utf8 >x.utf8.txt

Wenn Sie Enca nicht verwenden können oder wollen, können Sie die Codierung manuell erraten. Ein bisschen Umschauen sagte mir, dass dies polnischer Text ist und die Wörter trwały, stały, usuważ sind, also suchen wir nach einer Übersetzung, in der ³ł und æż. Dies sieht aus wie Latin-2 oder Latin-1 oder wahrscheinlicher (bei „Nicht-ISO“ CP125 , die Sie als - anzeigen. latin1 . Um die Datei in UTF-8 zu konvertieren, können Sie recode oder iconv verwenden.

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

Öffnen Sie die Textdatei mit gedit und im Dialogfeld "Speichern unter ..." sehen Sie die aktuelle Codierung.

1
gedit

Haben Sie versucht herauszufinden, welche genaue Codierung x.txt ist? Sie erhalten eine Liste der unterstützten Codierungen mit

iconv --list

Manchmal passiert mir, dass ich eine Nichtübereinstimmung zwischen latin1 und utf8 bekomme. Dann hilft es oft, es von und zurück zu utf8 zu konvertieren und umgekehrt.

0
user55518

Ich habe ein automatisiertes Konvertierungsskript mit der enca Bibliothek erstellt. Ich verwende es auf meinem NAS, um Untertitel in UTF-8 zu konvertieren, aber es könnte für jede automatisierte Konvertierung verwendet werden

Fühlen Sie sich frei zu benutzen :)

BEARBEITEN:

#!/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
0
Barlog951