2013-03-24 11 views
6

geholt mir das Thema einer E-Mail-Nachricht Python Modulen und empfangenen Zeichenfolgeersetzen = mit ‚ x‘ und dann in Python Decodierung

'=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?=' 

Ich weiß die Zeichenkette in ‚UTF-8‘ codiert ist. Python hat eine Methode, die auf Strings angewiesen ist, solche Strings zu dekodieren. Aber um die Methode zu verwenden, die ich brauchte, um = Zeichen mit \x Zeichenfolge zu ersetzen. Durch manuelles Austauschen und anschließendes Drucken der dekodierten resultierenden Zeichenkette erhalte ich die Zeichenkette للام_ککائی, die genau das ist, was ich möchte. Die Frage ist, wie kann ich den Austausch automatisch machen? Die Antwort scheint schwieriger zu sein als nur die einfache Verwendung von Funktionen in Strings wie die Replace-Funktion.

Unten habe ich den Code, den ich nach der manuellen Bedienung verwendet habe, gebracht?

r='\xD8\xB3\xD9\x84\xD8\xA7\xD9\x85_\xDA\xA9\xD8\xAC\xD8\xA7\xD8\xA6\xDB\x8C' 
print r.decode('utf-8') 

Ich würde jede praktikable Idee zu schätzen wissen.

Antwort

7

es dekodieren gerade von quoted-printable UTF8-kodierte bytestring zu erhalten:

wenn nötig, von utf-8 Unicode
In [35]: s = '=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?=' 
In [36]: s.decode('quoted-printable') 
Out[36]: '\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85_\xda\xa9\xd8\xac\xd8\xa7\xd8\xa6\xdb\x8c?' 

Dann:

In [37]: s.decode('quoted-printable').decode('utf8') 
Out[37]: u'\u0633\u0644\u0627\u0645_\u06a9\u062c\u0627\u0626\u06cc?' 

 

In [39]: print s.decode('quoted-printable') 
سلام_کجائی? 
+0

Huh, ich hatte nicht realisiert, dass du das direkt machen kannst. – svk

+0

Ich habe das Ergebnis nicht erhalten, indem ich s.decode ("quoted-printable") in meinem System druckte. Nur das Drucken der Unicode-Zeichenfolge ergab das gewünschte Ergebnis. – alexander

4

Diese Art der Codierung wird als quoted-printable bezeichnet. Es gibt ein Python-Modul zum Codieren und Decodieren.

Sie haben recht, dass es nur eine reine Notierung von binären Strings ist, also müssen Sie anschließend UTF-8-Decodierung anwenden. (Die Zeichenfolge Unter der Annahme ist in UTF-8, natürlich Aber das sieht richtig, obwohl ich die Sprache nicht kennen..)

import quopri 

print quopri.decodestring("'=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?='").decode("utf-8") 
+1

+1. Oder einfach 'r.decode ('quoted-printable') .decodieren ('utf-8')' – RichieHindle

+0

Die Lösungen von svk und RichieHindle funktionieren perfekt. Obwohl Letzteres bequemer ist. – alexander