我正在使用python 2.7.3,并尝试读取文本,计算其中的单词,并将单词与计数一起写入文本文件 . 输入文件(xml)具有以下输入:
但我的权利是什么 . 朋友Chingford的成员(Tebbit先生)不知道ߞ我也不是Lynn先生作为政治家的记录 .
我一直得到臭名昭着的错误:UnicodeDecodeError:'ascii'编解码器无法解码位置4中的字节0xdf:序号不在范围内(128),我认为这是我无法解码/编码this character entity的结果 . 相关代码是:
import codecs, sys
sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)
f = open(fullfile, 'rU')#, 'rU')#read as unicode
Sraw = f.read()
Sraw = Sraw.decode('utf8','ignore').encode('utf8','ignore')# modified, doesn't help
当我尝试将单词附加到列表(或打印它们,例如)时,程序就会死掉:
words =(nltk.wordpunct_tokenize(sentence.strip()))
dwords.extend(words)
我知道解码用于将字符串转换为unicode,而编码应该相反,并试图相应地更改我的代码,但无法弄清楚如何解决这个问题 . 任何意见是极大的赞赏 .
2 回答
使用unidecode包
会做的 .
U
不适用于unicode支持,适用于universal newlines:如果你的文件是用utf-8编码的,你需要用
codecs.open
打开它,给它正确的编码:实际上这并不完全正确,想到这样:
解码意味着"take something, and return the bytes"
编码意味着"take bytes, and convert them into characters"
如何映射每个字符应该被翻译成什么,这就是“编码”;这里是指定utf-8或其他编码的地方 . 在解码时就是如此,它知道在正确的表中查找字符以获得字节值;类似地,当编码时,它知道查找字节然后将其转换为正确的字符 .