Seite 1 von 1
iso, utf, newbie
Verfasst: Samstag 23. August 2008, 00:51
von Punked
hallo, ich bin leider nicht so der überflieger was das programmieren und gerade diese iso, utf, unicode-geschichte stellt mir echt jedes mal wieder ein bein...
ich habe ein script, dass mir google-alerts auf meinen rechner holt.
wenn umlaute dabei sind, sieht das z.B. so aus:
=?ISO-8859-1?Q?Google_Alert_=2D_Tim_M=E4lzer?=
mein (mac-)terminal sagt mir bei ENV, dass es LANG=de_DE.UTF-8 ist. beim script habe ich es mit utf-8-encoding und natürlich mit iso-8859-1 probiert.
kann mir jemand sagen, was ich da hier machen muss, da alle meine versuche fehlgeschlagen sind?
Verfasst: Samstag 23. August 2008, 08:35
von kaschu
Wenn Du die Google-Mail als ganzes verarbeiten möchtest (würde ich empfehlen), dann schau Dir die Module
email & Co. an. Die handhaben alle Aspekte, auch das Umwandeln der verschiedenen Kodierungen.
Falls Du nur diesen einen String dekodiert haben möchtest, ist das modul
quopri wahrscheinlich die Lösung:
Code: Alles auswählen
>>> import quopri
>>> print quopri.decodestring("=?ISO-8859-1?Q?Google_Alert_=2D_Tim_M=E4lzer?=")
=?ISO-8859-1?Q?Google_Alert_-_Tim_Mälzer?
Gruß
Karsten
Verfasst: Samstag 23. August 2008, 09:05
von BlackJack
Wenn man nur die Zeichenkette, ohne den Rest der Mail hat, kann man zum Beispiel `email.Header.decode_header()` verwenden, um eine Zeichenkette und die Kodierung zu ermitteln:
Code: Alles auswählen
In [29]: subject = '=?ISO-8859-1?Q?Google_Alert_=2D_Tim_M=E4lzer?='
In [30]: email.Header.decode_header(subject)
Out[30]: [('Google Alert - Tim M\xe4lzer', 'iso-8859-1')]
Verfasst: Samstag 23. August 2008, 09:37
von Punked
BlackJack hat geschrieben:
Code: Alles auswählen
In [29]: subject = '=?ISO-8859-1?Q?Google_Alert_=2D_Tim_M=E4lzer?='
In [30]: email.Header.decode_header(subject)
Out[30]: [('Google Alert - Tim M\xe4lzer', 'iso-8859-1')]
Was ich ja nicht checke ist, was ich machen muss, damit das stimmt.
Und in der Doku hab ich für diesen Standard-Fall komischerweise keine Beispiele gefunden.
Verfasst: Samstag 23. August 2008, 11:28
von Leonidas
Naja, ist ja auch nicht so kompliziert, eine Möglichkeit das zu machen wäre:
Code: Alles auswählen
email.Header.decode_header(subject)[0][0].endswith('Tim Mälzer')
(wobei es natürlich elegant wäre, den String erstmal in Unicode zu verwandeln und dann tatsächlich Unicode-Strings zu vergleichen)
Verfasst: Samstag 23. August 2008, 12:28
von Punked
Zum Glück kann man auch nach "Tim Maelzer" suchen lassen...