Python 3.7.9中如何将字符串形式的字节值转换为可读ASCII字符串
你当前拿到的列表元素为str类型,只有bytes类型支持decode方法,所以需要先将字符串还原为你预期的字节值,再解码为ASCII字符串。由于这些字符串是\x转义生成的单字符字符串,字符的Unicode码点和你需要的字节值完全对应,可通过以下方法实现:
解决方案
方法1:通过latin-1编码还原字节(最稳妥)
latin-1编码的字符集与Unicode前256个码点一一对应,不会出现数值丢失或编码错误:
# 单个元素转换示例 raw_str = "\x41" # 先编码得到原始字节 byte_val = raw_str.encode("latin-1") # 再转ASCII字符串 ascii_result = byte_val.decode("ascii") # 批量转换整个列表 byte_values = ["\x00", "\x02", "\x41", "\x62"] ascii_list = [s.encode("latin-1").decode("ascii") for s in byte_values]
如果存在超出ASCII范围的字节,可通过errors参数避免报错:
# 非ASCII字符替换为? ascii_list = [s.encode("latin-1").decode("ascii", errors="replace") for s in byte_values] # 非ASCII字符直接忽略 ascii_list = [s.encode("latin-1").decode("ascii", errors="ignore") for s in byte_values]
方法2:通过字符码点直接转换
如果确定所有值都在ASCII范围内,也可以直接读取字符的Unicode码点再转字符串:
ascii_list = [chr(ord(s)) for s in byte_values if ord(s) < 128]
内容的提问来源于stack exchange,提问作者AJH
相关产品推荐
相关产品推荐

