我正在使用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,而编码应该相反,并试图相应地更改我的代码,但无法弄清楚如何解决这个问题。非常感谢任何建议。
答案 0 :(得分:2)
答案 1 :(得分:1)
U
不支持unicode,适用于universal newlines:
除了标准的fopen()值模式可能是'U'或'rU'。 Python通常使用通用换行符支持构建;提供'U' 将文件作为文本文件打开,但行可以被任何一个终止 以下内容:Unix的行尾约定'\ n',Macintosh 约定'\ r',或Windows约定'\ r \ n'。所有这些 外部表示被Python程序视为'\ n'。如果 Python是在没有通用换行符的情况下构建的,支持“U”模式 与普通文本模式相同。请注意,文件对象也是如此打开 有一个名为newlines的属性,其值为None(如果没有) 还没看到换行符,'\ n','\ r','\ r \ n'或者元组 包含所有看到的新行类型。
如果你的文件是用utf-8编码的,你需要用codecs.open
打开它,给它正确的编码:
import codecs
with codecs.open(filename, mode='r', encoding='utf-8') as f:
for line in f:
# do stuff
我知道解码用于将字符串转换为unicode并且编码是 应该做相反的事情
实际上这并不完全正确,可以这样想:
如何映射每个字符应该被翻译成什么,这就是“编码”;这里是指定utf-8或其他编码的地方。在解码时就是如此,它知道在正确的表中查找字符以获得字节值;类似地,当编码时,它知道查找字节然后将其转换为正确的字符。