2013-03-24 48 views
6

解碼我使用Python模塊取出電子郵件消息的主題和接收的字符串與「 X」替換=然後在python

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

我知道字符串在「UTF-8」編碼。 Python有一個叫做字符串的方法來解碼這樣的字符串。但要使用我需要的方法來替換=符號與\x字符串。通過手動交換,然後打印解碼後的結果字符串,我得到字符串سلام_کجائی,這正是我想要的。問題是我如何自動進行交換?答案似乎比簡單使用像replace函數這樣的字符串上的函數更難。

下面我帶了手動操作後使用的代碼?

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

我會很感激任何可行的想法。

回答

7

只是它引用可打印解碼得到UTF8編碼的字節串:

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?' 

然後,如果需要的話,從UTF-8爲Unicode:

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

呵呵,我沒有意識到你可以直接做到這一點。 – svk 2013-03-24 22:13:21

+0

我沒有得到結果,只是在我的系統中打印s.decode('quoted-printable')。只打印unicode字符串給出了所需的結果。 – alexander 2013-03-25 08:35:57

4

這種編碼稱爲quoted-printable。有一個用於執行編碼和解碼的Python模塊。

你說得對,它只是一個純粹的二進制字符串引用,所以你需要在之後應用UTF-8解碼。 (假設這個字符串是UTF-8,當然,但是這看起來正確的,雖然我不知道的語言。)

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。或者只是'r.decode('quoted-printable')。decode('utf-8')' – RichieHindle 2013-03-24 22:12:30

+0

svk's和RichieHindle的解決方案都很完美。雖然後者更方便。 – alexander 2013-03-25 08:28:43