2
的Python imaplib有時會返回一個字符串,看起來像這樣UTF8字符串:如何處理從蟒蛇imaplib
=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?=
,這是什麼符號的名字嗎?
如何解碼(或者我應該說編碼?)它到UTF8?
的Python imaplib有時會返回一個字符串,看起來像這樣UTF8字符串:如何處理從蟒蛇imaplib
=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?=
,這是什麼符號的名字嗎?
如何解碼(或者我應該說編碼?)它到UTF8?
簡而言之:
>>> 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'
謝謝!我可以解碼完整的標題,還是應該逐字段地做? – user2449761
'decode_header'應該返回所有解碼後的消息。但試試看它是否會給你想要的結果 – Uriel