Zeichensatz einer Textdatei feststellen
Guten Morgen, ich überlege gerade ob es möglich ist den verwendeten Zeichensatz einer Textdatei automatisch zu ermitteln. Der Hintergurnd meiner Überlegung ist, wenn ich Strings aus einer Datei mit mir unbekannten Zeichensatz lese und diesen String dann in Unicode umwandeln will, brauche ich den verwendeten Zeichensatz. Aber wie ermittele ich den? Gibt es dafür eine Python funktion oder muss ich auf externe Programme wie z. B. file unter Linux zurückgreifen? Schon mal Danke im vorraus mfg Albert _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
--On Freitag, 18. März 2005 11:56 Uhr +0100 Albert Hermeling <Albert.Hermeling@t-online.de> wrote:
Guten Morgen,
ich überlege gerade ob es möglich ist den verwendeten Zeichensatz einer Textdatei automatisch zu ermitteln.
Nein. -aj _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Friday, 18. March 2005 11:56 schrieb Albert Hermeling:
Guten Morgen,
ich überlege gerade ob es möglich ist den verwendeten Zeichensatz einer Textdatei automatisch zu ermitteln. Der Hintergurnd meiner Überlegung ist, wenn ich Strings aus einer Datei mit mir unbekannten Zeichensatz lese und diesen String dann in Unicode umwandeln will, brauche ich den verwendeten Zeichensatz. Aber wie ermittele ich den? Gibt es dafür eine Python funktion oder muss ich auf externe Programme wie z. B. file unter Linux zurückgreifen?
Ein python-modul gibts AFAIK nicht. File oder recode sind da die Kandidaten - die implementieren entsprechende Heuristiken. Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On 18.Mär 2005 - 11:56:02, Albert Hermeling wrote:
Guten Morgen,
ich überlege gerade ob es möglich ist den verwendeten Zeichensatz einer Textdatei automatisch zu ermitteln.
Der Hintergurnd meiner Überlegung ist, wenn ich Strings aus einer Datei mit mir unbekannten Zeichensatz lese und diesen String dann in Unicode umwandeln will, brauche ich den verwendeten Zeichensatz. Aber wie ermittele ich den? Gibt es dafür eine Python funktion oder muss ich auf externe Programme wie z. B. file unter Linux zurückgreifen?
Kommt auf den Zeichensatz drauf an, us-ascii und latin1 erkennt man an vorhanden Umlauten (lies Zeichen mit Zahlen >127 bedeutet Umlaut), latin1 und latin9 kann man denke ich auch auseinanderhalten (aber frag mich nicht wie...). UTF-8 kann man von 1-Byte-Zeichensaetzen die mehr als 128 Zeichen haben auch gut unterscheiden. Bei UTF-16 oder -32 bin ich mir nicht sicher... Wie das mit Zeichensaetzen fuer Russisch, Hebraeisch, Afrikaans oder Japanisch ist weiss ich nicht. Aber ich denke auch die benutzen z.T. eine 8-Bit Kodierung (sprich du kannst sie nur schlecht von latin1 unterscheiden).... Du kannst dir ja mal den Quellcode von file anschauen, wie der es macht.... Andreas -- You will be awarded a medal for disregarding safety in saving someone. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Albert Hermeling wrote:
ich überlege gerade ob es möglich ist den verwendeten Zeichensatz einer Textdatei automatisch zu ermitteln.
Im allgemeinen nicht. Für eine XML-Datei kann man den Algorithmus in http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/363841 verwenden.
Der Hintergurnd meiner Überlegung ist, wenn ich Strings aus einer Datei mit mir unbekannten Zeichensatz lese und diesen String dann in Unicode umwandeln will, brauche ich den verwendeten Zeichensatz. Aber wie ermittele ich den? Gibt es dafür eine Python funktion oder muss ich auf externe Programme wie z. B. file unter Linux zurückgreifen?
Du musst eine Reihe von Kandidaten-Kodierungen haben (die vielleicht davon abhängt, in welcher Sprache die Datei ist), und diese Kodierungen in der richtigen Reihenfolge durchprobieren. "Richtig" ist dabei: - Kodierungen, die im Fall unsinniger Daten Fehler liefern, sollten vor Kodierungen ausprobiert werden, die das nicht tun (also: UTF-8 vor ISO-8859-1) - Kodierungen, die wahrscheinlicher sind, sollten vor Kodierungen ausprobiert werden, die unwahrscheinlicher sind. Ansonsten kannst Du auch linguistische Aspekte heranziehen, wie etwa das statistische Auftreten einzelner Buchstaben oder von Buchstabengruppen. Ciao, Martin _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (5)
-
"Martin v. Löwis" -
Albert Hermeling -
Andreas Jung -
Andreas Pakulat -
Diez B. Roggisch