Python3中UnicodeDecodeError报错及字符串转字节值方法咨询
解决Python字节与字符串转换的UnicodeDecodeError问题
Hey 兄弟,我来帮你搞定这个问题!你遇到的UnicodeDecodeError是因为默认用utf-8解码时,0x97这个字节在UTF-8编码规则里不是有效的起始字节,所以直接decode()会报错。咱们一步步拆解解决:
先看你的错误场景
执行这段代码时:
b'\x00\x01_\x97'.decode()
触发了如下报错:
Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> b'\x00\x01_\x97'.decode() UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 3: invalid start byte
一、正确把字节解码为字符串
核心问题是你得知道这些字节对应的编码格式。0x97在很多单字节编码里是合法的:
- 比如Windows常用的
cp1252编码中,0x97对应长破折号—,直接指定编码解码就没问题:b'\x00\x01_\x97'.decode('cp1252') # 输出:'\x00\x01_—' - 如果不确定编码,只是想避免报错继续运行,可以用错误处理参数:
- 忽略错误字节:
b'\x00\x01_\x97'.decode('utf-8', errors='ignore') # 输出:'\x00\x01_' - 把错误字节替换成占位符
�:b'\x00\x01_\x97'.decode('utf-8', errors='replace') # 输出:'\x00\x01_�'
- 忽略错误字节:
- 另外
latin-1编码可以映射所有0-255的字节到Unicode字符,不会报错:b'\x00\x01_\x97'.decode('latin-1') # 输出:'\x00\x01_\x97'
二、把字符串转换成对应的字节值
反过来操作的话,同样要指定编码才能得到正确的字节:
- 常规UTF-8编码转换:
my_str = "你好,Python" byte_data = my_str.encode('utf-8') # 输出:b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8cPython' - 如果要得到像你示例里包含
0x97的字节,就得用对应的编码(比如cp1252):dash_str = "—" byte_data = dash_str.encode('cp1252') # 输出:b'\x97'
内容的提问来源于stack exchange,提问作者Doctor PC
相关产品推荐
相关产品推荐

