2016-09-27 351 views
0

我從收到的郵件中有一個字編碼的字符串。當Python3解析編碼字,我得到了一個異常Python:gb2312編解碼器無法解碼字節

「GB2312」編解碼器不能解碼在18-19位字節:非法多字節 序列

make_header方法提高。

from email.header import decode_header, make_header 

hdr = decode_header("""=?gb2312?B?QSBWIM34IMXMILP2IMrbICAgqEMgs8kgyMsg?=""") 
make_header(hdr) 

語法分析的在線工具編碼字符串工作沒有問題(http://dogmamix.com/MimeHeadersDecoder/)。 任何建議我做錯了什麼?謝謝

回答

1

錯誤消息告訴您位於18-19的字節對此編碼無效。

decode_header只是簡單地提取一堆字節和一個編碼。 make_header實際上試圖解釋那個編碼中的那些字節,並且失敗,因爲這些字節在該編碼中是無效的。

同樣,

bash$ base64 -D <<<'QSBWIM34IMXMILP2IMrbICAgqEMgs8kgyMsg' | 
> iconv -f gb2312 -t utf-8 
A V 網 盤 出 售 
iconv: (stdin):1:18: cannot convert 

那麼錯誤信息只是告訴你,這個數據是無效的。我們不能沒有更多的信息告訴數據應該是什麼,Python和您的程序也不能這樣做。

對於一個粗略的比喻,你可以知道哪個b?t?s在這裏是可以的,但不是?h? L·納克? Sαδ+ë???。

+0

也許編碼的單詞真的是垃圾。我很迷惑那個(可能)正確顯示字符串的在線工具。我也從Outlook獲得了同樣的結果。 –

+0

看起來像你鏈接的工具忠實地解碼到一個不可顯示的角色。如果它顯示錯誤或「未知字符」字形但它只是實現「垃圾進入,垃​​圾出來」將會很好。 – tripleee

相關問題