Öffnen Sie eine Datei in der richtigen Kodierung automatisch [duplizieren]

Diese Frage hat hier schon eine Antwort:

  • Bestimmen Sie die Verschlüsselung von Text in Python 8 Antworten

Ich beschäftige mich mit einigen Problemen in einigen Dateien über die Codierung. Wir erhalten Dateien von einem anderen Unternehmen und müssen sie lesen (die Dateien sind im csv-Format)

Seltsamerweise erscheinen die Dateien in UTF-16 codiert. Ich schaffe es, das zu tun, aber ich muss sie mit dem codecs Modul öffnen und die Codierung auf diese Weise angeben.

 ENCODING = 'utf-16' with codecs.open(test_file, encoding=ENCODING) as csv_file: # Autodetect dialect dialect = csv.Sniffer().sniff(descriptor.read(1024)) descriptor.seek(0) input_file = csv.reader(descriptor, dialect=dialect) for line in input_file: do_funny_things() 

Aber genau wie ich den Dialekt in einer agnostischeren Weise bekomme, denke ich, dass es großartig ist, eine Möglichkeit zu haben, automatisch die Dateien mit der richtigen Codierung zu öffnen, zumindest alle Textdateien. Es gibt andere Programme, wie vim, die das erreichen.

Wer kennt einen Weg, dies in Python 2.6 zu tun?

PD: Ich hoffe, dass dies in Python 3 gelöst werden wird, da alle Strings Unicode sind …

4 Solutions collect form web for “Öffnen Sie eine Datei in der richtigen Kodierung automatisch [duplizieren]”

Chardet kann dir helfen

Zeichencodierung Auto-Erkennung in Python 2 und 3. So schlau wie Ihr Browser. Open Source.

Es wird nicht "fix" in Python 3, da es nicht ein fixierbares Problem ist. Viele Dokumente sind in mehreren Kodierungen gültig, so dass die einzige Möglichkeit, die richtige Kodierung zu bestimmen, ist, etwas über das Dokument zu wissen. Glücklicherweise wissen wir in den meisten Fällen etwas über das Dokument, wie zum Beispiel die meisten Charaktere werden in verschiedene Unicode-Blöcke gruppiert. Ein Dokument in Englisch enthält meist Zeichen innerhalb der ersten 128 Codepoints. Ein Dokument in Russisch enthält meist kyrillische Codepunkte. Das meiste Dokument enthält Leerzeichen und Zeilenumbrüche. Diese Hinweise können verwendet werden, um Ihnen zu helfen, gebildete Vermutungen darüber zu machen, welche Kodierungen verwendet werden. Besser noch, benutze eine Bibliothek von jemandem geschrieben, der bereits die Arbeit gemacht hat. (Wie chardet , erwähnt in einer anderen Antwort von Desintegr .

Csv.reader kann Unicode-Strings in 2.x nicht verarbeiten. Siehe unten der csv-Dokumentation und diese Frage für Möglichkeiten, damit umzugehen.

Wenn es in Python 3 behoben wird, sollte es auch mit der Verwendung behoben werden

 from __future__ import unicode_literals 
Python ist die beste Programmiersprache der Welt.