Frage

Ich habe eine Sammlung von Dateien, die in ANSI oder UTF-16LE codiert sind. Ich möchte, dass Python die Dateien mithilfe der richtigen Codierung öffnet. Das Problem ist, dass die ANSI-Dateien keine Ausnahme ansprechen, wenn sie mit UTF-16LE codiert und umgekehrt.

Gibt es eine einfache Möglichkeit, die Dateien mithilfe der richtigen Dateikodierung zu öffnen?

War es hilfreich?

Lösung

Verwenden Sie das Chardet Bibliothek zum Erkennen der Codierung.

Andere Tipps

Sie können nach dem suchen Bom Zu Beginn der Datei, um zu überprüfen, ob es sich um UTF handelt.

Dann unicode.decode Dementsprechend (unter Verwendung eines der der Standardkodierungen).

BEARBEITENOder versuchen Sie es mit s.decode ('ascii'). Ihre Zeichenfolge (angegeben ist der variable Name). Wenn es UnicodEdeCodeError wirft, dekodieren Sie es als 'utf_16_le'.

Was ist in den Dateien? Wenn es sich um einen einfachen Text in einem lateinischen Alphabet handelt, sind fast jedes andere Byte die UTF-16LE-Dateien Null. In den Windows-1252-Dateien hingegen würde ich überhaupt nicht erwarten, Nullen zu sehen. Zum Beispiel hier ist “Hello” In Windows-1252:

93 48 65 6C 6C 6F 94

... und in UTF-16LE:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

Abgesehen von den lockigen Zitaten karten jedes Zeichen mit dem gleichen Wert mit einem nachverfolgenden Null -Byte. In der Tat gilt dies für jeden Charakter im ISO-8859-1-Zeichensatz (Windows-1252 erweitert ISO-8859-1, um Zuordnungen für mehrere Druckzeichen-wie lockige Zitate-hinzuzufügen, um die Steuerzeichen im Bereich zu ersetzen 0x80..0x9F).

Wenn Sie wissen, dass alle Dateien entweder Windows-1252 oder UTF-16LE sind, sollte ein kurzer Scan für Nulos alles sein, was Sie herausfinden müssen, welche welche ist. Es gibt einen guten Grund, warum Chardet so langsam und komplex ist, aber in diesem Fall denke ich, dass Sie mit schnell und schmutzig davonkommen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top