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.

Code: Alles auswählen

subject[subject.find('Alert - ')+8:] == "Tim Mälzer"
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...