SMS als Email weiterleiten - Zeichenkodierung ändern

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
redfrog
User
Beiträge: 2
Registriert: Dienstag 7. August 2012, 18:25

Dienstag 7. August 2012, 18:43

Hallo,

ich hoffe ich bin in diesem Forum an der richtigen Adresse. Meine Suche war bisher Ergebnislos...

Ich leite von meinem Android Smartphone eingehende SMS auf eine Emailadresse weiter. Hierzu nutze ich die App "Tasker". Diese versendet eingehende SMS mit Hilfe dieses Python Skriptes:http://tasker.wdfiles.com/local--files/ ... ndemail.py

Das funktioniert auch bestens. Das einzige Problem ist, dass die Umlaute in der Email nicht korrekt dargestellt werden. Wenn ich Thunderbird für eingehende Emails auf ISO-8859-15 einstelle, werden die Umlaute mit falschen Sonderzeichen angezeigt. Wenn ich Thunderbrid auf UTF-8 einstelle, passt alles. Ich gehe also davon aus, dass für die ausgehenden Emails mit dem Python Skript UTF-8 genutzt wird.

Ich benötige aber zwingend die ISO Kodierung, da ich die Email in einem anderen Programm weiterverwenden möchte und dieses mit UTF-8 leider nicht umgehen kann.

Sowie ich bisher herausgefunden habe, kann man die Zeichenkodierung in Python durchaus umwandeln. Leider habe ich noch nicht kapiert, wie das in meinem speziellen Fall umzusetzen ist.

Vielleicht kann mir hier ja jemand helfen...
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Dienstag 7. August 2012, 22:12

Sowas?

Code: Alles auswählen

 "Ich habe Umlaute in mir. Ä".encode("ISO-8859-15")
Das ganze kannst du auch über http://docs.python.org/library/codecs.h ... ec-objects lösen.

Grüße,
anogayales
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 8. August 2012, 06:36

@anogayales: Dein Beispiel soll Python3 sein?

@redfrog: Um welches Python handelt es sich? 2.x oder 3.x? Arbeitest Du intern mit Unicode oder mit Bytestrings?¹

Grundsätzlich kannst Du bequem einen Unicodestring mittels `encode` in das passende Zielformat wandeln. Arbeitest Du intern mit Bytestrings, solltest Du das auf jeden Fall erst einmal überarbeiten und alles intern auf Unicode umstellen. Also zu früh wie möglich die eingehenden Daten in Unicode wandeln (`decode`) und dann so spät wie möglich wieder in Bytestrings codieren (`encode`).

¹ Bevor Du das beantwortest: Kannst Du die folgende Aussage als richtig oder falsch benennen: "UTF-8 == Unicode". Wenn Du das nicht kannst, dann lies Dir mal die Links in meiner Signatur durch :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
redfrog
User
Beiträge: 2
Registriert: Dienstag 7. August 2012, 18:25

Donnerstag 9. August 2012, 11:51

Hallo,

puh, das habe ich mir etwas einfacher vorgestellt... :-)

Ich hatte mit Programmierung und Python bisher nie etwas zu tun und werde es in Zukunft wohl auch nicht. Mir ging es lediglich um die Weiterleitung der SMS. Eine Anleitung zur Einrichtung gab es in einem Forum zur App.

Das Python Skript habe ich mir so wie es da steht aufs smartphone geladen und darin dann lediglich die emaildaten geändert. Ob es sich hierbei um 2.x oder 3.x handelt kann ich nicht sagen. Das gleiche gilt für Bytestrings, etc.

Vielleicht hat jemand aus dem Stegreif eine Idee speziell für das oben genannte Skript. Oder ist der Beitrag von anogayales schon die Lösung?

Ansonsten werde ich es aber auch überleben wenn die Umlaute nicht korrekt dargestellt werden...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 9. August 2012, 19:28

Das Script ist Python2 - und hässlich oben drein :-D

So weit ich das beim Überfliegen gesehen habe, arbeitet es intern nur mit Bytestrings. Dass bedeutet, dass Du das Encoding, welches Du reinsteckst auch wieder herausbekommst (außer da drin ist irgend ein Aufruf zu einer Funktion, die da etwas ummodelt).

Wenn Du also ISO-8859 haben willst, dann füttere das Script damit.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten