Ich habe eine .srt-Datei, die als Kauderwelsch angezeigt wird, wenn ich sie in gEdit in Ubuntu öffne. Also möchte ich es in utf8 konvertieren, um es lesen zu können.
Wenn ich versuche herauszufinden, was die Codierung gibt:
file -i x.srt
x.srt: text/plain; charset=unknown-8bit
Bei einem anderen Versuch fand ich:
find . -type f -print | xargs file
./x.srt: Non-ISO extended-ASCII text, with CRLF line terminators
Auch ich habe versucht, enca:
enca x.srt
enca: Cannot determine (or understand) your language preferences.
Please use `-L language', or `-L none' if your language is not supported
(only a few multibyte encodings can be recognized then).
Run `enca --list languages' to get a list of supported languages.
und
enca -L Persian x.srt
enca: Cannot determine (or understand) your language preferences.
Please use `-L language', or `-L none' if your language is not supported
(only a few multibyte encodings can be recognized then).
Run `enca --list languages' to get a list of supported languages.
Ich frage mich also, wie ich die Codierung kennen und schließlich in ein verwendbares Format konvertieren kann.
character-encoding
unicode
Super Mario
quelle
quelle
other
.head -n 20 x.srt | od -tx1
) posten ?iconv -f iso-8859-1 -t utf-8 < file.txt > out.txt
Antworten:
Es gibt keine zuverlässige Möglichkeit, von einer unbekannten Codierung in eine bekannte zu konvertieren.
Wenn Sie in Ihrem Fall wissen, dass der Originaltext auf Farsi / Persisch ist, können Sie möglicherweise eine Reihe möglicher Codierungen identifizieren und diese durchlaufen, bis Sie die erwartete Ausgabe sehen.
Basierend auf schnellem Googeln gibt es keinen stabilen Standardkonverter für die alte Iran-System-Codierung , und die einzige beliebte Alternative ist die Windows-Codepage 1256 . Ich habe MacArabic hier hauptsächlich zur Veranschaulichung aufgenommen (obwohl es vielleicht sogar eine praktikable Alternative für Farsi wäre?)
(Meine Version von
iconv
unterstützt MacArabic nicht wirklich, aber vielleicht haben Sie mehr Glück; oder Sie können ein anderes Konvertierungstool ausprobieren.)Untersuchen Sie die resultierenden Ausgabedateien. sehen Sie, ob einer von ihnen Sinn macht.
Wenn Sie wissen, wie die Ausgabe aussehen soll, können Sie auch einzelne Zuordnungen für Bytes in der Datei nachschlagen. Wenn das erste Byte 0x94 ist und Sie wissen, dass es als ﭖ angezeigt werden sollte, haben Sie im Grunde festgestellt, dass die Codierung das Iran-System ist. Vielleicht noch ein paar Bytes nachschlagen, um diese Schlussfolgerung zu überprüfen. Die Wikipedia-Seite für diese Codierung enthält eine Tabelle aller Zeichen. Dies ist offensichtlich mühsam, langsam und fehleranfällig, insbesondere wenn viele Kandidatencodierungen zur Auswahl stehen.
Für einige Codierungen finden Sie eine Liste, z. B. unter https://tripleee.github.io/8bit/. Für andere müssen Sie sich möglicherweise nur die entsprechenden Wikipedia-Codierungstabellen ansehen.
quelle
Eine Datei in einer unbekannten 8-Bit-Codepage wird aus einem Grund als "unbekannt-8-Bit" bezeichnet: Es ist kein einfaches Problem ohne Ideen zur Sprache. Um nicht zu sagen, dass es unmöglich ist, aber um effizient zu arbeiten, musste ein solcher heuristischer Detektor ein großes Vokabular aller am häufigsten verwendeten Sprachen, eine große Liste von Codepages und einige Grammatikkenntnisse besitzen. Update: nie versucht
enca
; Möglicherweise handelt es sich um einen Wunderdecoder, der in dieser Richtung hergestellt wurde. Wenn die Datei beispielsweise einen meist ASCII-Quellcode mit nur einem oder zwei Wörtern aus Oktetten mit hoher Bitmenge darstellt, ist es selbst mit einem solch wundersamen heuristischen Algorithmus praktisch unmöglich, die Sprache und die Codierung zu erraten. Aus diesem Grund bestand das ursprüngliche HTTP / 1.1 stark auf der Deklaration eines Zeichensatzes im HTTP-Content-Type:
Header für jedentext/
* Medientyp.Also die Lösung nach Punkten:
head
file|iconv -f
try (es wird angenommen, dass die Umgebungsvariable LANG entsprechend einer verwendeten TUI festgelegt ist) und prüfen Sie, ob das Ergebnis bis zum Erfolg lesbar ist.Diese Lösung setzt natürlich voraus, dass der Text ordnungsgemäß codiert ist, jedoch auf einer unbekannten Codepage. Fälle, in denen der Text durch einen menschlichen Fehler oder aufgrund eines Softwarefehlers verstümmelt wurde, können auf diese Weise nicht gelöst werden.
Die Punkte 2. und 3. können automatisiert sein, und solche Tools existieren zwar, sind jedoch sprachspezifisch (dh ein heuristischer Decoder für Russisch funktioniert nicht für Japanisch und umgekehrt) oder müssen zumindest die Eingabe angeben Sprache (wie
enca
auch).Mögliche Codierungen für die persische Sprache sind Windows-1256 (siehe diesen Thread ), ISO 8859-6 und die veraltete Iran-Systemcodierung . Seien Sie froh, dass Sie hier keine Liste mit mindestens sieben für Russisch verwendeten Codepages haben (KOI7, KOI8, CP866, Windows-1251, ISO 8859-5, MacCyrillic, MIK).
quelle
Vielleicht, um alle ~ 1000 Möglichkeiten von iconv visuell zu überprüfen, indem 20 erste Zeilen von jeder aufgelistet werden ... zusammengeführt mit all.txt Ergebnis.
... und finden Sie heraus, welches Format das richtige ist (wenn Sie Persisch erkennen können).
quelle
iconv -l
führt zu einer großen Anzahl effektiv duplizierter Aliase sowie offensichtlich unwahrscheinlichen Kandidaten wie verschiedenen CJKV-Codierungen.