' UTF-8'编解码器不能解码字节0x89

时间:2014-11-30 23:00:01

标签: python csv

我想阅读一个csv文件并处理一些列,但我一直在遇到问题。 遇到以下错误:

Traceback (most recent call last):
  File "C:\Users\Sven\Desktop\Python\read csv.py", line 5, in <module>
    for row in reader:
  File "C:\Python34\lib\codecs.py", line 313, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 446: invalid start byte
>>> 

我的代码

import csv
with open("c:\\Users\\Sven\\Desktop\\relaties 24112014.csv",newline='', encoding="utf8") as f:
    reader = csv.reader(f,delimiter=';',quotechar='|')
    #print(sum(1 for row in reader))
    for row in reader:
        print(row)
        if row:
            value = row[6]
            value = value.replace('(', '')
            value = value.replace(')', '')
            value = value.replace(' ', '')
            value = value.replace('.', '')
            value = value.replace('0032', '0')
            if len(value) > 0:
                print(value + ' Length: ' + str(len(value)))

我是Python的初学者,尝试使用谷歌搜索,但很难找到合适的解决方案。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

这是最重要的线索:

  

无效的起始字节

正如评论中所建议的,

\x89不是无效的UTF-8字节。它是一个完全有效的延续字节。这意味着如果它遵循正确的字节值,它会正确编码UTF-8:

http://hexutf8.com/?q=0xc90x89

因此,您(1)没有您期望的UTF-8数据,或者(2)您有一些格式错误的UTF-8数据。 Python编解码器只是让你知道它在序列中以错误的顺序遇到\x89

(有关延续字节的更多内容:http://en.wikipedia.org/wiki/UTF-8#Codepage_layout

答案 1 :(得分:2)

.PNG文件的第一个字节为0x89 。并不是说这是您的问题,但是.PNG标头经过专门设计,因此 误解释为文本

为什么会有一个.csv文件实际上是一个我不知道的.png文件。但是,如果有人不小心重命名了文件,肯定会发生。在Windows 10上,由于它们愚蠢的复选框功能,我偶尔会不小心批量重命名文件。为什么Microsoft决定台式机具有与平板电脑相同的UI控件是我的主意...我不知道。