二进制转ASCII报错:utf-8无法解码字节0xa6,求代码解决方案
二进制转ASCII的错误解决方法
问题分析
你遇到的'utf-8' codec can't decode byte 0xa6...错误,核心原因有两点:
- 原始二进制字符串长度不是8的整数倍,直接转整数再转字节会导致字节对齐错误;
- 部分字节值(比如0xa6)不属于UTF-8的合法编码范围,UTF-8解码要求字节符合特定格式,因此解码失败。
目标转换器的逻辑是将二进制按8位一组拆分,每组对应一个单字节字符(包含扩展ASCII),这种场景下用latin-1编码更适配——它对0-255的所有字节都有对应的字符映射。
修正后的代码
def stringmodulasi(f): # 原始二进制字符串 f = "11110000111110101111001100000110000001110000001000001011111111101111111111111010000011001111100111110111111100101111010011111110" # 补前导0,确保长度是8的整数倍 padding = 8 - len(f) % 8 if padding != 8: f = '0' * padding + f # 按每8位拆分,转成字节对象 byte_data = bytes(int(f[i:i+8], 2) for i in range(0, len(f), 8)) # 用latin-1解码,支持所有单字节值 ascii_text = byte_data.decode('latin-1') return ascii_text # 测试函数 print(stringmodulasi(""))
代码说明
- 补前导0:保证二进制字符串能被8整除,避免拆分时出现不完整的字节;
- 按8位拆分:每组二进制转成0-255的整数,再组合成字节对象;
- latin-1解码:UTF-8不支持的字节(如0xa6),latin-1能直接映射为对应的字符,和目标转换器的输出效果一致。
内容的提问来源于stack exchange,提问作者HelpMeInDjango
相关产品推荐
相关产品推荐

