[Python-de] Usenet-Kodierung

Georg Mischler schorsch at schorsch.com
Don Jun 5 08:33:10 EDT 2003


Lutz Schroeer wrote:

> Tach,
>
> ich spiele gerade ein wenig mit dem nntplib-Modul herum und bin dabei
> auf folgendes Problem gestossen, das ich bis jetzt nicht
> zufriedenstellend lösen konnte:
>
> Um Nicht-ASCII-Zeichen darzustellen werden die Strings im Header und
> Body kodiert.
>
> Das kann dann z.B. so aussehen:
> "From: =?ISO-8859-1?Q?Michael_Str=F6der?= <michael at stroeder.com>"
>
> Gibt es ein Python-Modul, mit dem ich das wieder dekodieren kann? Wenn
> nicht, wo finde ich Informationen über das Format? Ich könnte jetzt was
> spezielles für ISO-8859 schreiben, aber allgemein wäre natürlich besser


Fuer die Body-Parts steht die Kodierung im entsprechenden
Content-Type (Sub-)Header, welche dir das email-Modul (ab Python
2.2, glaube ich) auseinanderklaubt. Typischerweise kommen dort
quoted-printable und base64 zum Einsatz, aber auch uu-Encoding
koennte hin und wieder noch anzutreffen sein. Das Format der
Nachrichten ist ja bei E-Mail und Usenet zumindest formal
identisch.

Dein Beispiel-Header oben ist in quoted-printable. Um den zu
entziffern musst du allerdings auch noch die =?...? Kodierungs-
Hinweise rausfiltern, und am besten wahrscheinlich das Resultat
nach Unicode umwandeln (und den Zeichensatz fuer eine
Rueckwandlung zwischenspeichern?). Ob das email-Modul das schon
macht, weiss ich nicht, aber vermutlich wuerde so eine Funktion
da am besten hinpassen.

Die Maintainer wuerden sich vielleicht ja ueber einen Patch
freuen. Allerdings weiss ich nicht, wie weit dieses Format auch
wirklich standardisiert ist. Ich habe schon Header mit vier oder
fuenf hintereinanderfolgenden Zeichensatz-Deklarationen gesehen,
welche wahrscheinlich nicht zwingend alle gleich sein muessen...


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/