Discussion:
[Python-de] Zeichensatz einer Textdatei feststellen
Albert Hermeling
2005-03-18 17:57:39 UTC
Permalink
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
Andreas Jung
2005-03-18 18:15:09 UTC
Permalink
--On Freitag, 18. März 2005 11:56 Uhr +0100 Albert Hermeling
Post by Albert Hermeling
Guten Morgen,
ich überlege gerade ob es möglich ist den verwendeten Zeichensatz einer
Textdatei automatisch zu ermitteln.
Nein.

-aj

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 186 bytes
Beschreibung: nicht verfügbar
URL : http://starship.python.net/pipermail/python-de/attachments/20050318/7216ea55/attachment.pgp
Diez B. Roggisch
2005-03-18 18:20:02 UTC
Permalink
Post by 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
Andreas Pakulat
2005-03-18 18:34:34 UTC
Permalink
Post by 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?
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.
"Martin v. Löwis"
2005-03-19 01:38:14 UTC
Permalink
Post by Albert Hermeling
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.
Post by Albert Hermeling
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

Loading...