UnicodeDecodeError:'ascii'编解码器无法解码位置13中的字节0xe2:序号不在范围内(128)

我正在使用NLTK在我的文本文件上执行kmeans聚类,其中每行被认为是一个文档。 所以例如,我的文本文件是这样的:

属于手指死亡之拳

迈克仓促的墙壁杰里科
jägermeister规则
规则乐队跟随表演jägermeister阶段
途径

现在我试图运行的演示代码是这样的: https : //gist.github.com/xim/1279283

我收到的错误是这样的:

Traceback (most recent call last): File "cluster_example.py", line 40, in words = get_words(job_titles) File "cluster_example.py", line 20, in get_words words.add(normalize_word(word)) File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/nltk/decorators.py", line 183, in memoize result = func(*args) File "cluster_example.py", line 14, in normalize_word return stemmer_func(word.lower()) File "/usr/local/lib/python2.7/dist-packages/nltk/stem/snowball.py", line 694, in stem word = (word.replace(u"\u2019", u"\x27") UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 13: ordinal not in range(128) 

这里发生了什么?

该文件正在被读作一堆str ,但它应该是unicode s。 Python试图隐式转换,但失败。 更改:

 job_titles = [line.strip() for line in title_file.readlines()] 

显式解码strunicode (这里假设为UTF-8):

 job_titles = [line.decode('utf-8').strip() for line in title_file.readlines()] 

这也可以通过导入codecs模块并使用codecs.open而不是内置的open

你也可以试试这个:

 import sys reload(sys) sys.setdefaultencoding('utf8')