首页 文章

UnicodeDecodeError:'utf-8' codec无法解码字节

提问于
浏览
108

这是我的代码,

for line in open('u.item'):
#read each line

每当我运行此代码时,它会给出以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte

我试图解决这个问题并在open()中添加一个额外的参数,代码看起来像;

for line in open('u.item', encoding='utf-8'):
#read each line

但它再次给出了同样的错误 . 那我该怎么办!请帮忙 .

7 回答

  • 9

    正如Mark Ransom所说,我找到了解决该问题的正确编码 . 编码为"ISO-8859-1",因此用 open('u.item', encoding = "ISO-8859-1") 替换 open("u.item", encoding="utf-8") 将解决问题 .

  • 238

    您的文件实际上不包含utf-8编码数据,它包含一些其他编码 . 找出编码是什么,并在 open 调用中使用它 .

    例如,在Windows-1252编码中, 0xe9 将是字符 é .

  • 13

    也适合我,ISO 8859-1将节省很多,哈哈哈,主要是如果使用语音识别API

    例:

    file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1");
    
  • 22

    尝试使用pandas阅读

    pd.read_csv('u.item', sep='|', names=m_cols , encoding='latin-1')
    
  • 19

    如果您正在使用 Python 2 ,则以下解决方案:

    import io
    for line in io.open("u.item", encoding="ISO-8859-1"):
        # do something
    

    因为 encoding 参数不适用于 open() ,您将收到以下错误:

    TypeError: 'encoding' is an invalid keyword argument for this function
    
  • 0

    如果有人在寻找这些,这是在Python 3中转换CSV文件的示例:

    try:
        inputReader = csv.reader(open(argv[1], encoding='ISO-8859-1'), delimiter=',',quotechar='"')
    except IOError:
        pass
    
  • 2

    Sometimes open(filepath) ,其中 filepath 实际上不是文件会得到相同的错误,所以首先要确保您尝试打开的文件存在:

    import os
    assert os.path.isfile(filepath)
    

    希望这会有所帮助 .

相关问题