Wie ändere ich die Codierung von Nicht-ISO-Extended-ASCII-Text mit CRLF-Zeilenabschluss in UTF-8?


21

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 Kodierung dieser Datei in UTF-8 ändern? Ich habe bis jetzt den folgenden Weg ausprobiert:

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

Vielleicht sollte ich extended ASCII( high ASCII) irgendwie benutzen , kann es aber nicht in iconvder Codierungsliste finden.


2
kannst du die datei irgendwo hochladen
Stoppen Sie Monica am

Hier finden Sie eine praktische Liste von 8-Bit-ISO-Codierungen, die alle nebeneinander angezeigt werden . Entspricht einer von ihnen genau dem, was Sie in Ihrer Akte beobachten? Zum Beispiel, wenn Sie denken, "stabil" sollte "stacy" sein, dann finden Sie heraus, welche Codierung ein "c" für was auch immer der seltsame Hex-Code in diesem Wort ist.
John1024

Wahrscheinlich ist "Nicht-ISO-Extended-ASCII-Text" in 90% der Fälle eine Datei, die in der Windows 1252- Codepage codiert ist . "Es ist wahrscheinlich die weltweit am häufigsten verwendete 8-Bit-Zeichenkodierung." (Wikipedia). Versuchen Sie es zuerst:iconv -f windows-1252 -t utf-8 file
Nyov

Antworten:


33

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

  • höchstwahrscheinlich eine „Text“ -Datei, die keine Steuerzeichen (Bytewerte 0–31) außer Zeilenumbrüchen enthält;
  • “Extended-ASCII”, weil es Zeichen außerhalb des ASCII-Bereichs gibt (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 zu befinden scheint. Sie können Encas automatische Erkennung ausprobieren . Möglicherweise müssen Sie ihn in die richtige Richtung bewegen, indem Sie ihm mitteilen, in welcher Sprache der Text vorliegt.

enca x.txt
enca -L polish x.txt

Um die Datei zu konvertieren, übergeben Sie die -xOption:enca -L polish x.txt -x utf8 >x.utf8.txt

Wenn Sie Enca nicht verwenden können oder möchten, können Sie die Codierung manuell erraten. Ein bisschen herumschauen sagte mir, dass dies polnischer Text ist und die Wörter trwały, stały, usuważ sind, also suchen wir nach einer Übersetzung wo ³łund æż. Dies sieht aus wie latin-2 oder latin-10 oder wahrscheinlicher (bei einem CP1250 ohne ISO, den Sie als latin1 betrachten) . 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

Ich verstehe mich nicht mit < x.txt > x.utf8.txtWarum verwenden wir <und dann >? Wie funktioniert es?
Filip Bartuzi


1

Öffnen Sie die Textdatei mit gedit und im Dialog "Speichern unter ..." sehen Sie die aktuelle Kodierung.


0

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

iconv - Liste

Manchmal passiert es mir, dass ich eine Diskrepanz zwischen latin1 und utf8 bekomme. Dann hilft es oft, es von und nach utf8 und umgekehrt zu konvertieren.


0

Ich habe ein automatisiertes Konvertierungsskript mit der enca- Bibliothek erstellt. Ich verwende es auf meinem NAS, um Untertitel in UTF-8 zu konvertieren. Es kann jedoch 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.