【问题标题】:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 3131: invalid start byteUnicodeDecodeError:“utf-8”编解码器无法解码位置 3131 中的字节 0x80:无效的起始字节
【发布时间】:2020-01-26 01:59:09
【问题描述】:
import os
import shutil
import codecs


directory = '~/Desktop/ra/clean_tokenized/1987'

for filename in os.listdir(directory):
    full_name = directory + '/' + filename
    with open(full_name, 'r') as article:
        for line in article:
            print(line)

这是回溯:

Traceback(最近一次调用最后一次): 文件“~/Desktop/corpus_filter/01_corpus.py”,第 11 行,在 对于文章中的行: 解码中的文件“~/.conda/envs/MangerRA/lib/python3.7/codecs.py”,第 322 行 (结果,消耗)= self._buffer_decode(数据,self.errors,最终) UnicodeDecodeError:“utf-8”编解码器无法解码位置 3131 中的字节 0x80:无效起始字节

该文件包含日文字符,我只是尝试制作一个包含文件中出现的所有单词的 CSV 文件。但我无法克服这个错误。

【问题讨论】:

    标签: python unicode utf-8 codec utf


    【解决方案1】:

    Python 正在尝试使用 UTF-8 编码打开您的文件(现在大部分时间都是默认的)。不幸的是,您的文件正在使用其他编码(或以其他方式损坏),因此解码失败。

    很遗憾,我不知道您的文件使用什么编码。你必须自己调查。您可以尝试另一种编码方式,例如 Shift JIS(使用 open(full_name, 'r', encoding='shift-jis')),看看您是否获得了有效文本或 mojibake

    如果一切都失败了,您可以以二进制模式打开文件('rb' 而不仅仅是'r'),然后立即查看位于字节 3131 的内容。它可能只是文件中的一小部分数据,您可以手动删除或修复。

    【讨论】:

    • 我检查了文件的字符集,它用 utf-8 表示。我将如何检查位于字节 3131 的内容?顺便谢谢你的帮助。
    • 以二进制模式打开,然后read() 将整个文件(或其中的一大块)转换成一个字节串。然后只需索引或切片。 file.read()[3100:3200]也许...
    • 您的答案可能会受益于提及chardet 之类的内容作为猜测编码的另一种尝试。
    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 2023-02-07
    • 2021-09-21
    • 2017-09-27
    • 2023-03-09
    • 2020-09-22
    • 2022-05-30
    • 1970-01-01
    相关资源
    最近更新 更多