2016-09-11 71 views
2

的Python imaplib有時會返回一個字符串,看起來像這樣UTF8字符串:如何處理從蟒蛇imaplib

=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?= 

,這是什麼符號的名字嗎?

如何解碼(或者我應該說編碼?)它到UTF8?

回答

1

簡而言之:

>>> from email.header import decode_header 
>>> msg = decode_header('=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?=')[0][0].decode('utf-8') 
>>> msg 
'Repertuar wydarze\u0144 z woj. Dolno\u015bl\u0105skie' 

我的電腦不顯示波蘭的人物,但他們應該會出現在你的(區域設置等)


解釋:

使用email.header解碼器:

>>> from email.header import decode_header 
>>> value = decode_header('=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?=') 
>>> value 
[(b'Repertuar wydarze\xc5\x84 z woj. Dolno\xc5\x9bl\xc4\x85skie', 'utf-8')] 

這將返回一個帶解碼頭的列表,通常包含一個帶有解碼消息和檢測到的編碼的元組(有時不止一對)。

>>> msg, encoding = decode_header('=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?=')[0] 
>>> msg 
b'Repertuar wydarze\xc5\x84 z woj. Dolno\xc5\x9bl\xc4\x85skie' 
>>> encoding 
'utf-8' 

最後,如果你想msg作爲一個正常的UTF-8字符串,使用字節decode方法:

>>> msg = msg.decode('utf-8') 
>>> msg 
'Repertuar wydarze\u0144 z woj. Dolno\u015bl\u0105skie' 
+0

謝謝!我可以解碼完整的標題,還是應該逐字段地做? – user2449761

+0

'decode_header'應該返回所有解碼後的消息。但試試看它是否會給你想要的結果 – Uriel