iso, utf, newbie

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Punked
User
Beiträge: 5
Registriert: Mittwoch 20. August 2008, 14:15

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?
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

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
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')]
Punked
User
Beiträge: 5
Registriert: Mittwoch 20. August 2008, 14:15

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Punked
User
Beiträge: 5
Registriert: Mittwoch 20. August 2008, 14:15

Zum Glück kann man auch nach "Tim Maelzer" suchen lassen...
Antworten