赞
踩
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position xx: invalid continuation byte
- Unicode解码错误: 'utf-8'编解码器无法解码位置(第38行)中的字节:因为这个字节是无效的延续字节
- 0xd6:0x开始能区分十六进制与十进制表达,这里是0xd6(十六进制)=6*1+13*16=214(十进制)=1101 0110(二进制),即本次无法解码:1101 0110
在国际上,各个国家认可标准的ASCII编码,包含a-z、A-Z、0-9、常见键盘符等;在实际编程中,除了使用英文,我们也要使用本国的语言,于是各国产生了本国的ANSI编码,即在ASCII编码的基础上往前不断堆叠0和1,而ANSI编码在中国的规则是常见的gbk编码
同样是二进制字节 1101 0110 ,gbk解码(我国ANSI编码)代表内容是和他国ANSI编码代表内容可以完全不一致,即我们常说的乱码问题。
输入中文字符串时,在内存中是以unicode形式存储,我们也可以添加encoding参数指定以哪种编码方式存储,在win系统中,默认编码是ANSI编码,在简体中文的环境则为“gbk”,尤其一点,python的输出环境是默认为utf-8,即pandas库的to_csv默认结果为utf-8,而简体中文的excel遇到中文时是按gbk解码的,不加参数往往会遇到问题
因此,pandas库的to_csv往往添加参数 ,encoding=‘utf_8_sig’或者encoding=‘gbk’(‘ansi’)
补充编码解码的代码案例:
- s='中'
- print(ord(s)) #20013
- '中'.encode('utf-8') #b'\xe4\xb8\xad'
- DATA = b'\xe4\xb8\xad'
- DATA = str(DATA,'utf-8')
- print(DATA) #中
(1)utf-8' codec can't decode byte 0xd6 in position xx: invalid continuation byte
在read_csv中添加: encoding='ISO-8859-1'
- import pandas as pd
- Exposure_raw = pd.read_csv(r'D:\Program Files\Anaconda3\installation location\Lib\site-packages\addressparser\pca.csv', index_col=0,encoding='ISO-8859-1')
(2)'str' object has no attribute 'decode' (字符串对象没有编码属性)
--------->需对字符串先编码成二进制,再解码
'张俊'.encode('utf-8').decode('utf-8')
而且,如果是: '张俊'.encode('utf-8').decode('gbk') 结果与上面不同
(1)解码错误解决方案
(2)编码根源解释
Python >>> b'\xe6\x88\x91'类型编码转换为汉字_原谅我这一生不羁放纵爱自由-CSDN博客当接收到类似这样的一串东西的时候:b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'而我们需要将其转换为汉字进行显示。则我们只需要在代码中将其编码换成utf-8 即可:DATA = b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'DATA = str(DATA,'utf-8')print(DATA)输出结果:我爱你...https://blog.csdn.net/weixin_40973138/article/details/105593481(4)'str' object has no attribute 'decode'
---->方案1::先encode转为bytes,再decode
---->方案2:强制转换忽略错误:bytes.decode(‘’utf-8‘’, ‘’ignore‘’)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。