Ich hatte einige Probleme mit Untertiteldateien im Video-Omxplayer. Um das Problem zu lösen, musste ich von Windows-1250 auf UTF-8-Codierung konvertieren. Meine Frage ist, wie kann ich für eine bestimmte Datei sehen, welche Codierung verwendet wird?
23
piconv
um die Kodierung zu ändern;)Antworten:
Sie können nicht wirklich automatisch herausfinden, ob eine Datei ursprünglich mit der Kodierung X geschrieben wurde.
Was Sie jedoch leicht tun können, ist zu überprüfen, ob die gesamte Datei mit einem bestimmten Codec irgendwie (aber nicht unbedingt richtig) erfolgreich dekodiert werden kann. Wenn Sie Bytes finden, die für eine bestimmte Codierung nicht gültig sind, muss es sich um etwas anderes handeln.
Das Problem ist, dass viele Codecs ähnlich sind und die gleichen "gültigen Bytemuster" haben, nur dass sie als unterschiedliche Zeichen interpretiert werden. Beispielsweise
ä
könnte eine in einer Codierung in eineré
anderen oderø
in einer dritten entsprechen. Der Computer kann nicht wirklich erkennen, auf welche Weise das Byte interpretiert werden kann, was zu korrekt lesbarem Text führt (es sei denn, Sie fügen ein Wörterbuch für alle Arten von Sprachen hinzu und lassen Rechtschreibprüfungen durchführen ...). Sie müssen auch wissen, dass einige Zeichensätze tatsächlich Teilmengen anderer sind, wie z. B. die ASCII-Codierung ein Teil der am häufigsten verwendeten Codecs wie einige der ANSI-Familie oder UTF-8. Das bedeutet zum Beispiel, dass ein als UTF-8 gespeicherter Text, der nur einfache lateinische Zeichen enthält, mit der gleichen Datei identisch ist, die als ASCII gespeichert wurde.Kommen wir jedoch von der Erklärung, was Sie nicht können, zu dem zurück, was Sie tatsächlich können:
Für eine grundlegende Überprüfung von ASCII- / Nicht-ASCII-Textdateien (normalerweise UTF-8) können Sie den
file
Befehl verwenden. Es kennt jedoch nicht viele Codecs und untersucht nur die ersten paar kB einer Datei, vorausgesetzt, der Rest enthält keine neuen Zeichen. Andererseits erkennt es auch andere gängige Dateitypen wie verschiedene Skripte, HTML / XML-Dokumente und viele Binärdatenformate (was für den Vergleich von Textdateien jedoch alles andere als interessant ist) und gibt möglicherweise zusätzliche Informationen darüber aus, ob es extrem lange Zeilen gibt oder welche Typ der Newline-Sequenz (zB UNIX: LF, Windows: CR + LF) wird verwendet.Wenn das nicht ausreicht, kann ich Ihnen das Python-Skript anbieten, das ich für diese Antwort hier geschrieben habe . Es scannt vollständige Dateien und versucht, sie mit einem bestimmten Zeichensatz zu dekodieren. Wenn dies erfolgreich ist, ist diese Codierung ein potenzieller Kandidat. Andernfalls können Sie, wenn es Bytes gibt, die nicht damit decodiert werden können, diesen Zeichensatz aus Ihrer Liste entfernen.
quelle
Ein Programm namens
file
kann dies tun. Beispiel:Wenn Sie interessiert sind, wie es gemacht wird, sehen Sie
src/encoding.c
.quelle
file
macht eine Vermutung, und häufig ist es nicht sehr gut. In meinen Tests wurden beispielsweise sowohl MacRoman als auch CP-1252 als ISO-8859 falsch identifiziert, mit dem Ergebnis, dass "š" und "ß" verschlüsselt wurden..sql
Datei zu finden undfile
zeigte mir, dass es sich tatsächlich um einegzip
komprimierte Datei handelt!