Wie bestimmt die Codierung von text?
Erhielt ich einige text, der codiert ist, aber ich weiß nicht, welche Zeichenkodierung verwendet wurde. Gibt es eine Möglichkeit, um zu bestimmen, die Codierung einer text-Datei mit Python? Wie kann ich erkennen, das encoding/codepage einer Textdatei beschäftigt sich mit C#.
InformationsquelleAutor Nope | 2009-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Korrekten Erkennung der Kodierung aller Zeiten ist unmöglich.
(Von chardet-FAQ:)
Gibt es die chardet Bibliothek verwendet, die Studie, um zu versuchen zu erkennen Codierung. chardet ist ein port für die automatische Erkennung von code in Mozilla.
Können Sie auch UnicodeDammit. Es werden die folgenden Methoden ausprobieren:
chardet
Referenz. Scheint gut, obwohl ein bisschen langsam.Nicht in der Lage gewesen, die Codierung zu erkennen...ist das nicht ein Fehler in der Codierung standard? sollte das nicht immer vorhersehbar?
Es gibt keine solche Sache wie "die encoding-standard". Text-Kodierung ist etwas so alt wie computing, wuchs organisch mit der Zeit und muss, es war nicht geplant. "Unicode" ist ein Versuch, dieses Problem zu beheben.
Und nicht schlecht, alle Dinge betrachtet. Was ich gerne wissen würde ist, wie finde ich heraus, welche Kodierung einer offenen text-Datei geöffnet wurde?
was ich sagte ist, dass richtig erkannt wird aller Zeiten ist unmöglich. Alles, was Sie tun können, ist eine Vermutung, aber kann es manchmal scheitern, es funktioniert nicht jedes mal, aufgrund der Codierungen nicht wirklich nachweisbar. Zu tun, die denke, Sie können verwenden Sie eines der Werkzeuge, die ich vorgeschlagen, in die Antwort
InformationsquelleAutor nosklo
Weitere option für die Arbeit der Kodierung ist die Verwendung
libmagic (das ist der code hinter dem
Datei - Befehl). Es gibt eine fülle von
python-bindings zur Verfügung.
Die python-bindings, die live in der Datei source-tree sind als die
python-magic (oder Python ist3-magic)
debian-Paket. Es kann feststellen, die Kodierung einer Datei:
Gibt es einen gleichnamigen, aber inkompatiblen, python-magic pip-Paket auf pypi, die auch verwendet
libmagic
. Es können auch die Kodierung, indem Sie:libmagic
ist in der Tat eine gangbare alternative zuchardet
. Und große Informationen über die verschiedene Pakete, die mitpython-magic
! Ich bin mir sicher, dass diese Mehrdeutigkeit beißt viele Leutesudo apt-get install python3-magic
für Python ist3file
ist nicht besonders gut auf die Identifizierung der menschlichen Sprache in text-Dateien. Es ist hervorragend für die Identifizierung der verschiedenen container-Formaten, obwohl Sie manchmal haben, um zu wissen, was es bedeutet ("Microsoft Office-Dokument" könnte bedeuten, dass eine Outlook-Nachricht, etc).Auf der Suche nach einem Weg, um zu verwalten-Datei-Codierung Rätsel fand ich diesen Beitrag. Leider mit dem Beispiel code, ich kann nicht vorbei
open()
:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 169799: invalid start byte
. Die Datei-Kodierung nach vim ist:set fileencoding
istlatin1
.Wenn ich das optionale argument
errors='ignore'
, die Ausgabe der Beispiel-code ist der weniger hilfreichbinary
.InformationsquelleAutor Hamish Downer
Einige encoding-Strategien, kommentieren bitte nach Geschmack :
Möchten Sie vielleicht zu prüfen, die die Codierung durch das öffnen und Lesen der Datei in form einer Schleife... aber Sie müssen möglicherweise überprüfen Sie die Dateigröße erste :
io
wieio.open(filepath, 'r', encoding='utf-8')
, die bequemer ist, weilcodecs
konvertieren nicht\n
automatisch auf das Lesen und schreiben. Mehr auf HIERInformationsquelleAutor zzart
Hier ist ein Beispiel für das Lesen und die Einnahme unbesehen ein
chardet
Codierung Vorhersage, Lesenn_lines
aus der Datei in der Ereignis-es ist groß.chardet
erhalten Sie auch eine Wahrscheinlichkeit (d.h.confidence
) Codierung Vorhersage (noch nicht angesehen, wie Sie kommen), die zurückgegeben wird, mit seiner Vorhersage vonchardet.predict()
, so dass Sie arbeiten konnte, irgendwie, wenn Sie mögen.Ich habe geändert in dieser Funktion auf diese Weise:
def predict_encoding(file_path, n=20): ... skip ... and then rawdata = b''.join([f.read() for _ in range(n)])
wurde versucht, diese Funktion auf Python-3.6, perfekt gearbeitet, mit "ascii", "cp1252", "utf-8", "unicode" - Kodierungen. Also das ist definitiv upvote.InformationsquelleAutor ryanjdillon
InformationsquelleAutor Bill Moore
Abhängig von Ihrer Plattform, ich nur entscheiden, ob Sie die linux-shell
file
Befehl. Dies funktioniert für mich, da ich es in einem Skript, der ausschließlich läuft auf einem unserer linux-Rechner.Natürlich ist dies nicht die ideale Lösung oder Antwort, aber es könnte geändert werden zu fit Ihre Bedürfnisse. In meinem Fall brauche ich nur, um festzustellen, ob eine Datei UTF-8 oder nicht.
InformationsquelleAutor MikeD
Ist es im Prinzip unmöglich zu bestimmen, die Codierung einer text-Datei, in der Allgemeine Fall. Also Nein, es gibt keine standard-Python-Bibliothek, um das für Sie tun.
Wenn du mehr spezifische Kenntnisse über die text-Datei (z.B., dass es XML ist), könnte es sein, library-Funktionen.
InformationsquelleAutor Martin v. Löwis
Wenn Sie wissen, das einige Inhalte der Datei, die Sie versuchen können, Sie zu entschlüsseln, mit mehreren Kodierung und sehen, welches fehlt. Im Allgemeinen gibt es keine Möglichkeit, da eine text-Datei ist eine text-Datei, und die sind dumm 😉
InformationsquelleAutor Martin Thurau
Diese Seite hat python-code für die Anerkennung der ascii-Kodierung mit Stücklisten und utf8 ohne bom: https://unicodebook.readthedocs.io/guess_encoding.html. Lesen der Datei in byte-array (data): http://www.codecodex.com/wiki/Read_a_file_into_a_byte_array. Hier ist ein Beispiel. Ich bin in osx.
InformationsquelleAutor js2010