UnicodeDecodeError,无效的连续字节
- 2024-12-19 09:23:00
- admin 原创
- 55
问题描述:
为什么下面的项目失败了?为什么使用“latin-1”编解码器可以成功?
o = "a test of xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
其结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python27libencodings/utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError:
'utf8' codec can't decode byte 0xe9 in position 10: invalid continuation byte
解决方案 1:
当我尝试通过方法打开 CSV 文件时遇到了同样的错误pandas.read_csv
。
解决方案是将编码更改为latin-1
:
pd.read_csv('ml-100k/u.item', sep='|', names=m_cols , encoding='latin-1')
解决方案 2:
在二进制中,0xE9 看起来像1110 1001
。如果您在 Wikipedia 上阅读有关UTF-8 的内容,您会看到这样的字节后面必须跟两个形式的10xx xxxx
。因此,例如:
>>> b'xe9x80x80'.decode('utf-8')
u'/u9000'
但这只是导致异常的机械原因。在这种情况下,您有一个几乎肯定用 latin 1 编码的字符串。您可以看到 UTF-8 和 latin 1 看起来有何不同:
>>> u'xe9'.encode('utf-8')
b'xc3xa9'
>>> u'xe9'.encode('latin-1')
b'xe9'
(请注意,我在这里混合使用了 Python 2 和 3 表示形式。输入在任何版本的 Python 中都是有效的,但您的 Python 解释器不太可能以这种方式同时显示 unicode 和字节字符串。)
解决方案 3:
这是无效的 UTF-8。该字符是 ISO-Latin1 中的 e-acute 字符,这就是它在该代码集上成功的原因。
如果您不知道接收字符串的代码集,那么您会遇到一些麻烦。最好为您的协议/应用程序选择一个代码集(希望是 UTF-8),然后您就会拒绝那些未解码的代码集。
如果你做不到这一点,你就需要启发式方法。
解决方案 4:
因为 UTF-8 是多字节的,并且没有与您xe9
加上后面的空格的组合相对应的字符。
为什么它在utf-8 和 latin-1中都会成功?
同一句话在 utf-8 中的翻译如下:
>>> o.decode('latin-1').encode("utf-8")
'a test of xc3xa9 char'
解决方案 5:
如果显示 UTF-8 错误,请使用此方法
pd.read_csv('File_name.csv',encoding='latin-1')
解决方案 6:
如果在操作刚打开的文件时出现此错误,请检查是否在'rb'
模式下打开了它
解决方案 7:
utf-8代码错误通常发生在数值范围超过0到127时。
引发这个异常的原因是:
1)如果代码点小于 128,则每个字节与代码点的值相同。 2)如果代码点大于或等于 128,则 Unicode 字符串无法以此编码表示。(在这种情况下,Python 会引发 UnicodeEncodeError 异常。)
为了解决这个问题,我们有一套编码,最广泛使用的是“Latin-1,也称为ISO-8859-1”
因此,ISO-8859-1 Unicode 点 0-255 与 Latin-1 值相同,因此转换为此编码只需将代码点转换为字节值;如果遇到大于 255 的代码点,则该字符串不能编码为 Latin-1
当您尝试加载数据集时出现此异常,请尝试使用此格式
df=pd.read_csv("top50.csv",encoding='ISO-8859-1')
在语法末尾添加编码技术,然后接受加载数据集。
解决方案 8:
当你在 Pandas 中输入特定文件或数据时,就会出现这种类型的错误,例如:-
data=pd.read_csv('/kaggle/input/fertilizers-by-product-fao/FertilizersProduct.csv)
然后错误显示如下:- UnicodeDecodeError:'utf-8'编解码器无法解码位置 1 中的字节 0xf4:无效的连续字节
因此,为了避免这种类型的错误,可以通过添加参数来删除
data=pd.read_csv('/kaggle/input/fertilizers-by-product-fao/FertilizersProduct.csv', encoding='ISO-8859-1')
解决方案 9:
当我从文件中读取包含希伯来语的文本时,也发生了这种情况.txt
。
我点击了: file -> save as
并将此文件保存为UTF-8
编码
解决方案 10:
TLDR:我建议在切换编码器以消除错误之前深入调查问题的根源。
当我处理大量包含附加 zip 文件的 zip 文件时出现此错误。
我的工作流程如下:
阅读 zip
阅读子 zip
从子 zip 中读取文本
有一次我遇到了上面的编码错误。仔细检查后发现,一些子 zip 错误地包含了其他 zip。将这些 zip 读取为文本会导致一些奇怪的字符表示,我可以用 来静音encoding="latin-1"
,但这反过来又导致了后续的问题。由于我处理的是国际数据,因此认为这是一个编码问题并不完全愚蠢(我遇到了 问题0xc2: Â
),但最终这不是实际问题。
解决方案 11:
在这种情况下,我尝试执行激活路径/文件.sql的.py。
我的解决方案是将file.sql的编码修改为“UTF-8 without BOM”,这样就成功了!
您可以使用 Notepad++ 来完成。
我会留下我的一部分代码。
con = psycopg2.connect(host = sys.argv[1],
port = sys.argv[2],dbname = sys.argv[3],user = sys.argv[4], password = sys.argv[5])
cursor = con.cursor()
sqlfile = open(path, 'r')
解决方案 12:
我遇到了这个问题,结果发现我直接从 Google Sheets 文件中保存了 CSV。换句话说,我当时在一个 Google Sheet 文件中。我选择保存一份副本,然后当我的浏览器下载它时,我选择打开。然后,我直接保存了 CSV。这是错误的举动。
修复这个问题的方法是先将工作表保存为.xlsx
本地计算机上的文件,然后从那里将单个工作表导出为.csv
。然后错误就消失了pd.read_csv('myfile.csv')
解决方案 13:
解决方案是更改为“UTF-8 sin BOM”
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件