天道酬勤,学无止境

“utf-8”编解码器无法解码字节 0x89('utf-8' codec can't decode byte 0x89)

问题

我想读取一个 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 的初学者,尝试过谷歌搜索,但很难找到正确的解决方案。

谁能帮我吗?

回答1

这是最重要的线索:

无效的起始字节

\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)

回答2

.PNG 文件的第一个字节是 0x89 。 并不是说这是您的问题,但 .PNG 标头是专门设计的,因此不会意外地将其解释为 text

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

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 错误UnicodeDecodeError:'utf-8'编解码器无法解码位置0的字节0xff:无效的起始字节(error UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte)
    问题 https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools 在上述站点上编译“ process.py”时发生错误。 python tools/process.py --input_dir data -- operation resize --outp ut_dir data2/resize data/0.jpg -> data2/resize/0.png 追溯(最近一次通话): File "tools/process.py", line 235, in <module> main() File "tools/process.py", line 167, in main src = load(src_path) File "tools/process.py", line 113, in load contents = open(path).read() File"/home/user/anaconda3/envs/tensorflow_2/lib/python3.5/codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError:
  • “utf-8”编解码器无法解码字节 0x80('utf-8' codec can't decode byte 0x80)
    问题 我正在尝试下载 BVLC 训练模型,但遇到此错误 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 110: invalid start byte 我认为是因为以下功能(完整代码) # Closure-d function for checking SHA1. def model_checks_out(filename=model_filename, sha1=frontmatter['sha1']): with open(filename, 'r') as f: return hashlib.sha1(f.read()).hexdigest() == sha1 知道如何解决这个问题吗? 回答1 您打开的文件不是 UTF-8 编码的,而系统的默认编码设置为 UTF-8。 由于您正在计算 SHA1 哈希,因此您应该将数据作为二进制读取。 hashlib函数要求您传入字节: with open(filename, 'rb') as f: return hashlib.sha1(f.read()).hexdigest() == sha1 注意在文件模式中添加了b 。 请参阅 open() 文档: mode是一个可选字符串,用于指定打开文件的模式。 它默认为'r'
  • UnicodeDecodeError:“ utf8”编解码器无法解码字节“ 0xc3”(UnicodeDecodeError: 'utf8' codec can't decode byte “0xc3”)
    问题 在python 2.7中我有这个: # -*- coding: utf-8 -*- from nltk.corpus import abc with open("abc.txt","w") as f: f.write(" ".join(i.words())) 然后,我尝试使用Python 3阅读本文档: with open("abc.txt", 'r', encoding='utf-8') as f: f.read() 只能得到: File "C:\Python32\lib\codecs.py", line 300, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 633096: invalid continuation byte 我做错了什么? Notepad ++似乎表明该文档是Unicode utf-8。 即使我尝试使用Notepad ++将文档转换为这种格式,我在python 3中仍然会收到此错误,这很奇怪,因为我阅读了许多其他utf-8编码的文档而没有任何问题。 回答1 我的猜测是您的输入编码为ISO-8859-2
  • 提供UnicodeDecodeError的Python 3 CSV文件:“ utf-8”编解码器在我打印时无法解码字节错误(Python 3 CSV file giving UnicodeDecodeError: 'utf-8' codec can't decode byte error when I print)
    问题 我在Python 3中有以下代码,该代码用于打印csv文件中的每一行。 import csv with open('my_file.csv', 'r', newline='') as csvfile: lines = csv.reader(csvfile, delimiter = ',', quotechar = '|') for line in lines: print(' '.join(line)) 但是当我运行它时,它给了我这个错误: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 7386: invalid start byte 我查看了csv文件,结果发现,如果我取出一个ñ(小N,顶部有波浪号),则每一行都可以很好地打印出来。 我的问题是,我已经针对类似的问题浏览了许多不同的解决方案,但我仍然不知道如何解决此问题,解码/编码内容等。仅选择数据中的ñ字符是不可行的。 回答1 我们知道该文件包含字节b'\x96'因为错误消息中提到了它: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 7386: invalid start byte 现在我们可以编写一个b'\x96'解码为ñ编码是否存在:
  • json.dump-UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xbf:无效的起始字节(json.dump - UnicodeDecodeError: 'utf8' codec can't decode byte 0xbf in position 0: invalid start byte)
    问题 我有一个存储的字典data : key -事件的ID value此事件的名称,其中value是UTF-8字符串 现在,我想将此地图记录到一个json文件中。 我尝试了这个: with open('events_map.json', 'w') as out_file: json.dump(data, out_file, indent = 4) 但这给了我错误: UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xbf:无效的起始字节 现在,我还尝试了: with io.open('events_map.json', 'w', encoding='utf-8') as out_file: out_file.write(unicode(json.dumps(data, encoding="utf-8"))) 但这会引发相同的错误: UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xbf:无效的起始字节 我也尝试过: with io.open('events_map.json', 'w', encoding='utf-8') as out_file: out_file.write(unicode(json.dumps(data, encoding="utf-8", ensure_ascii=False))) 但这会引发错误
  • UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xa5:无效的起始字节(UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte)
    问题 我正在使用Python-2.6 CGI脚本,但在执行json.dumps()时在服务器日志中发现了此错误, Traceback (most recent call last): File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module> print json.dumps(​​__get​data()) File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps return _default_encoder.encode(obj) File "/usr/lib/python2.7/json/encoder.py", line 201, in encode chunks = self.iterencode(o, _one_shot=True) File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode return _iterencode(o, 0) UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte ``这里 ​__get​data(
  • Python-'ASCII'编解码器无法解码字节(Python - 'ascii' codec can't decode byte)
    问题 我真的很困惑我尝试编码,但错误提示can't decode... >>> "你好".encode("utf8") Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) 我知道如何避免在字符串上加上“ u”前缀的错误。 我只是想知道为什么在调用编码时错误“无法解码”。 Python到底是做什么的? 回答1 "你好".encode('utf-8') encode将unicode对象转换为string对象。 但是在这里,您已经在string对象上调用了它(因为您没有u)。 因此,python必须首先将string转换为unicode对象。 所以它相当于 "你好".decode().encode('utf-8') 但是解码失败,因为字符串无效的ascii。 这就是为什么您会抱怨无法解码的原因。 回答2 始终从unicode编码为字节。 在这个方向上,您可以选择encoding 。 >>> u"你好".encode("utf8") '\xe4\xbd\xa0\xe5\xa5\xbd' >>> print _
  • Python:UnicodeDecodeError:'utf8'编解码器无法解码字节(Python: UnicodeDecodeError: 'utf8' codec can't decode byte)
    问题 我正在将一堆 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
  • UnicodeDecodeError:'ascii'编解码器无法解码位置23的字节0xc3:序数不在范围内(128)(UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 23: ordinal not in range(128))
    问题 当我尝试将其串联时,当字段包含“ñ”或“´”时,出现UnicodeDecodeError。 如果包含“ñ”或“´”的字段是最后一个字段,则不会有任何错误。 #... nombre = fabrica nombre = nombre.encode("utf-8") + '-' + sector.encode("utf-8") nombre = nombre.encode("utf-8") + '-' + unidad.encode("utf-8") #... return nombre 任何的想法? 非常感谢! 回答1 您正在编码为UTF-8,然后重新编码为UTF-8。 Python仅在首先再次解码为Unicode时才能这样做,但它必须使用默认的ASCII编解码器: >>> u'ñ' u'\xf1' >>> u'ñ'.encode('utf8') '\xc3\xb1' >>> u'ñ'.encode('utf8').encode('utf8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
  • UnicodeDecodeError:“ ascii”编解码器无法解码字节0xc2(UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2)
    问题 我正在用Python创建XML文件,我的XML上有一个字段,用于放置文本文件的内容。 我这样做 f = open ('myText.txt',"r") data = f.read() f.close() root = ET.Element("add") doc = ET.SubElement(root, "doc") field = ET.SubElement(doc, "field") field.set("name", "text") field.text = data tree = ET.ElementTree(root) tree.write("output.xml") 然后我得到了UnicodeDecodeError 。 我已经尝试在脚本上方加上特殊注释# -*- coding: utf-8 -*- ,但仍然出现错误。 我也已经尝试对变量data.encode('utf-8')进行编码,但是仍然出现错误。 我知道这个问题非常普遍,但是我从其他问题中获得的所有解决方案都不适用于我。 更新 追溯:仅在脚本第一行使用特殊注释 Traceback (most recent call last): File "D:\Python\lse\createxml.py", line 151, in <module> tree.write("D:\\python\\lse\\xmls
  • Python:UnicodeDecodeError:“ascii”编解码器无法解码位置 0 中的字节 0xef:序号不在范围内(128)(Python: UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128))
    问题 我目前的 python 3 代码有问题。 replace_line('Products.txt', line, tenminus_str) 是我试图变成 utf-8 的行吗,但是当我尝试像其他人一样这样做时,我会收到错误,例如没有属性,并且当我尝试添加时,例如... .decode("utf8") ...到最后,我仍然收到它使用 ascii 的错误。 我还尝试了与其他行一起使用的其他方法,例如添加 io. infront 并添加一个逗号 encoding = 'utf8' 我用于 replace_line 的函数是: def replace_line(file_name, line_num, text): lines = open(file_name, 'r').readlines() lines[line_num] = text out = open(file_name, 'w') out.writelines(lines) out.close() 我将如何解决这个问题? 请注意,我对 Python 非常陌生,还不够先进,无法很好地进行调试。 编辑:与“重复”不同的解决此问题的方法 编辑 2:我现在有另一个功能错误。 File "FILELOCATION", line 45, in refill replace_line('Products.txt', str(line)
  • Python抛出“'utf8'编解码器无法在位置0解码字节0xd0”错误(Python Throwing “'utf8' codec can't decode byte 0xd0 in position 0” Error)
    问题 我正在尝试加载当前存在的工作表并导入如下所示的文本文件(逗号分隔值)屏幕截图, Excel表格: 文本文件: 我正在使用下面显示的代码: # importing necessary modules for performing the required operation import glob import csv from openpyxl import load_workbook import xlwt #read the text file(s) using the CSV modules and read the dilimiters and quoutechar for filename in glob.glob("E:\Scripting_Test\Phase1\*.txt"): spamReader = csv.reader((open(filename, 'rb')), delimiter=',') #read the excel file and using xlwt modules and set the active sheet wb = load_workbook(filename=r"E:\Scripting_Test\SeqTem\Seq0001.xls") ws = wb.worksheets(0) #write the data that
  • “ for line in…”结果为UnicodeDecodeError:'utf-8'编解码器无法解码字节(“for line in…” results in UnicodeDecodeError: 'utf-8' codec can't decode byte)
    问题 这是我的代码, for line in open('u.item'): # Read each line 每当我运行此代码时,都会出现以下错误: UnicodeDecodeError:'utf-8'编解码器无法解码位置2892中的字节0xe9:无效的继续字节 我试图解决这个问题,并在open()中添加了一个额外的参数。 代码如下: for line in open('u.item', encoding='utf-8'): # Read each line 但是,它再次给出了相同的错误。 那我该怎么办? 回答1 正如Mark Ransom所建议的那样,我找到了解决该问题的正确编码。 编码为“ ISO-8859-1”,因此将open("u.item", encoding="utf-8")替换为open('u.item', encoding = "ISO-8859-1")解决问题。 回答2 以下内容对我也有用。 ISO 8859-1将节省很多,哈哈哈-主要是在使用语音识别API的情况下。 例子: file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1"); 回答3 您的文件实际上并不包含UTF-8编码的数据; 它包含其他一些编码。 弄清楚该编码是什么,并在open调用中使用它。 例如,在Windows
  • UnicodeDecodeError: 'utf-8' 编解码器无法解码字节错误(UnicodeDecodeError: 'utf-8' codec can't decode byte error)
    问题 我正在尝试从urllib获取响应并将其解码为可读格式。 文本是希伯来语,还包含像{和/ 首页编码是: # -*- coding: utf-8 -*- 原始字符串是: b'\xff\xfe{\x00 \x00\r\x00\n\x00"\x00i\x00d\x00"\x00 \x00:\x00 \x00"\x001\x004\x000\x004\x008\x003\x000\x000\x006\x004\x006\x009\x006\x00"\x00,\x00\r\x00\n\x00"\x00t\x00i\x00t\x00l\x00e\x00"\x00 \x00:\x00 \x00"\x00\xe4\x05\xd9\x05\xe7\x05\xd5\x05\xd3\x05 \x00\xd4\x05\xe2\x05\xd5\x05\xe8\x05\xe3\x05 \x00\xd4\x05\xea\x05\xe8\x05\xe2\x05\xd4\x05 \x00\xd1\x05\xde\x05\xe8\x05\xd7\x05\xd1\x05 \x00"\x00,\x00\r\x00\n\x00"\x00d\x00a\x00t\x00a\x00"\x00 \x00:\x00 \x00[\x00]\x00\r\x00\n\x00}\x00\r\x00\n\x00\r\x00\n\x00'
  • UnicodeDecodeError:'utf8'编解码器无法解码字节0x9c(UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c)
    问题 我有一个套接字服务器,应该可以从客户端接收UTF-8有效字符。 问题是某些客户端(主要是黑客)正在通过它发送所有错误的数据。 我可以轻松地区分真正的客户端,但是我会将所有发送的数据记录到文件中,以便以后进行分析。 有时我会收到这样的字符œ导致UnicodeDecodeError错误。 我需要能够使字符串UTF-8带有或不带有这些字符。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收ASCII命令,例如: EHLO example.com MAIL FROM: <john.doe@example.com> ... 我将所有这些都记录在JSON中。 然后,一些没有好心的人决定派遣各种垃圾。 这就是为什么对于我的特定情况,完全可以剥离非ASCII字符。 回答1 http://docs.python.org/howto/unicode.html#the-unicode-type str = unicode(str, errors='replace') 或者 str = unicode(str, errors='ignore') 注意:这将删除(忽略)有问题的字符,并返回不包含这些字符的字符串。 对我来说,这是理想的情况,因为我将其用作针对非ASCII输入的保护,这是我的应用程序所不允许的。 或者:使用编解码器模块中的open方法读取文件: import codecs
  • Python Pandas to_excel'utf8'编解码器无法解码字节(Python pandas to_excel 'utf8' codec can't decode byte)
    问题 我正在尝试在Python熊猫中做一些数据工作,但写出我的结果时遇到了麻烦。 我将数据读取为CSV文件,并一直将每个脚本导出为自己的CSV文件,效果很好。 最近,尽管我尝试使用工作表将所有内容导出到1个Excel文件中,但其中一些工作表给我一个错误 “'utf8'编解码器无法解码位置1的字节0xe9:无效的连续字节” 我什至不知道如何开始寻找任何可能导致导出到Excel的问题的字符。 不知道为什么它导出到CSV就好了:( 相关行 from pandas import ExcelWriter data = pd.read_csv(input) writer = ExcelWriter(output) #output is just the filename fundraisers.to_excel(writer, "fundraisers") locations.to_excel(writer, "locations") #error locations.to_csv(outputcsv) #works writer.save() 违规数据框的打印头 Event ID Constituent ID Email Address First Name \ Last Name f 1 A A 1 F 4 L R C M 1 1 A D F 4 A A G M 2 0 R G M 3 O
  • UnicodeDecodeError: 'ascii' 编解码器无法解码字节 0xc5(UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5)
    问题 UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 537: ordinal not in range(128), referer: ... 当我尝试使用字符“č”输出我的整个网站时,我总是收到此错误。 我正在使用 mako 模板。 该怎么办? 回答1 发生错误是因为某处代码将您的 unicode 模板字符串强制转换为 python 2 str ; 您需要自己将渲染的模板编码为 UTF-8 字节串: if isinstance(rendered, unicode): rendered = rendered.encode('UTF-8') # rendered is now guaranteed to be of type str 回答2 问题是您的代码由于超过 8 位而无法解码某些字符,因此请尝试使用: converted = unicode("your_string", encoding="utf-8", errors="ignore") 祝你好运 回答3 确保您使用正确的语言环境设置运行脚本,例如 $ locale -a | grep "^en_.\+UTF-8" en_GB.UTF-8 en_US.UTF-8 $ export LC_ALL=en_GB.UTF-8 $ export
  • UnicodeDecodeError: 'ascii' 编解码器无法解码位置 0 中的字节 0xe7:序号不在范围内 (128)(UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128))
    问题 我在用 utf-8 编码字符时遇到了麻烦。 我正在使用 Django,当我尝试使用非纯文本发送 Android 通知时出现此错误。 我试图找到错误的来源,并设法找出错误的来源不在我的项目中。 在 python shell 中,我输入: 'ç'.encode('utf8') 我收到这个错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128) 我收到相同的错误: 'á'.encode('utf-8') unicode('ç') 'ç'.encode('utf-8','ignore') 我也收到 smart_text、force_text 和 smart_bytes 错误。 这是 Python、我的操作系统还是其他方面的问题? 我在 Red Hat 版本 4.4.7-3 上运行 Python 2.6.6 回答1 您正在尝试编码/解码字符串,而不是 Unicode 字符串。 以下语句确实有效: u'ç'.encode('utf8') u'á'.encode('utf-8') unicode(u'ç')
  • UnicodeDecodeError:“ ascii”编解码器无法解码位置1的字节0xef(UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1)
    问题 我在尝试将字符串编码为UTF-8时遇到一些问题。 我已经尝试了很多事情,包括使用string.encode('utf-8')和unicode(string) ,但出现错误: UnicodeDecodeError:'ascii'编解码器无法解码位置1的字节0xef:序数不在范围内(128) 这是我的字符串: (。・ω・。)ノ 我不知道出了什么问题,知道吗? 编辑:问题是按原样打印字符串无法正确显示。 另外,当我尝试将其转换为此错误时: Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89' >>> s1 = s.decode('utf-8') >>> print s1 Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't
  • UnicodeDecodeError:'utf8'编解码器无法解码位置3131中的字节0x80:无效的起始字节(UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 3131: invalid start byte)
    问题 我正在尝试使用python 2.7.12从json文件读取twitter数据。 我使用的代码是这样的: import json import sys reload(sys) sys.setdefaultencoding('utf-8') def get_tweets_from_file(file_name): tweets = [] with open(file_name, 'rw') as twitter_file: for line in twitter_file: if line != '\r\n': line = line.encode('ascii', 'ignore') tweet = json.loads(line) if u'info' not in tweet.keys(): tweets.append(tweet) return tweets 结果我得到: Traceback (most recent call last): File "twitter_project.py", line 100, in <module> main() File "twitter_project.py", line 95, in main tweets = get_tweets_from_dir(src_dir, dest_dir) File "twitter