的Python:UnicodeDecodeError错误:“UTF-8”编解码器不能解码字节(Pyt

2019-07-30 22:44发布

我读了一堆的RTF文件到Python字符串。 一些文字,我得到这个错误:

Traceback (most recent call last):
  File "11.08.py", line 47, in <module>
    X = vectorizer.fit_transform(texts)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
716, in fit_transform
    X = super(TfidfVectorizer, self).fit_transform(raw_documents)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
398, in fit_transform
    term_count_current = Counter(analyze(doc))
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
313, in <lambda>
    tokenize(preprocess(self.decode(doc))), stop_words)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
224, in decode
    doc = doc.decode(self.charset, self.charset_error)
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 462: invalid
 start byte

我试过了:

  1. 复制和粘贴文件到新的文件中的文本
  2. 保存的RTF文件为txt文件
  3. Openin在记事本的txt文件++并选择“转换为UTF-8”,也是编码设置为UTF-8
  4. 打开文件与Microsoft Word,并将其保存为新文件

没有什么作品。 有任何想法吗?

这也可能是没有关系的,但这里的柜面你想知道的代码:

f = open(dir+location, "r")
doc = Rtf15Reader.read(f)
t = PlaintextWriter.write(doc).getvalue()
texts.append(t)
f.close()
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X = vectorizer.fit_transform(texts)     

Answer 1:

因为我在邮件列表中称,它可能比较容易使用charset_error选项并将其设置为ignore 。 如果该文件实际上是UTF-16,您还可以设置字符集在矢量器UTF-16。 查看文档 。



Answer 2:

这将解决你的问题:

import codecs

f = codecs.open(dir+location, 'r', encoding='utf-8')
txt = f.read()

从那个时候起TXT是Unicode格式,你可以在你的代码的任何地方使用它。

如果你希望你的处理后,生成UTF-8的文件做:

f.write(txt.encode('utf-8'))


Answer 3:

你可以转储JSON文件CSV文件行不进行任何编码错误,如下所示:

json.dump(row,jsonfile, encoding="ISO-8859-1")


Answer 4:

保留此行:

vectorizer = TfidfVectorizer(encoding='latin-1',sublinear_tf=True, max_df=0.5, stop_words='english')

编码= '的Latin-1' 为我工作。



文章来源: Python: UnicodeDecodeError: 'utf8' codec can't decode byte