2011-04-23 22 views
1

我想解析從文件中加載的電子郵件的Message-ID字段的域名,並將其與來自域的域進行比較以查看它的匹配程度如何。然後我使用nltk.edit_distance()來比較距離。在Python中你如何處理域名中的其他編碼

我使用

re.search('@[\[\]\w+\.]+',mail['Message-ID']).group()[1:]

但一個垃圾郵件有以下

mail2['Message-ID'] 
'<[email protected]\x82\xb1\x82\xea\x82\xa9\x82\xe7\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4>' 

所以,當我嘗試和匹配,它並沒有在group()

返回匹配

我可以在Shift_JIS中對它進行解碼,但不知道如何處理它 <[email protected]これから見えるだろう>

我不想嘗試和檢查每個可能的字符編碼。

任何想法,我應該用它做什麼?

回答

1

你可以嘗試chardet project,它使用一種算法來猜測字符編碼:

import chardet 

text = '<[email protected]\x82\xb1\x82\xea\x82\xa9\x82\xe7' + \ 
    '\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4>' 
cset = chardet.detect(text) 
print cset 
encoding = cset['encoding'] 
print encoding, text.decode(encoding) 

輸出:

{'confidence': 1, 'encoding': 'SHIFT_JIS'} 
SHIFT_JIS <[email protected]これから見えるだろう> 
+0

謝謝,我會記住這一點,如果我需要做的事情像這樣,但我會用一個簡單的解決方案,使用repr(my_string)值強制它成爲ascii然後剝離\'s。 – 2011-04-24 01:39:16

相關問題