Python字符串转字节编码不变问题求助(无法加b前缀)
解决字符串转字节串时的编码匹配问题
我来帮你拆解这个问题,核心是字符串和字节串的编码/解码逻辑搞反了,咱们一步步说清楚:
问题原因
你手里的data = '\xc4\xb7\x86\x17\xcd'是一个Python字符串(str类型),但这些字符本质上是原本字节串被错误解码后的结果——大概率是当初有人把字节串b'\xc4\xb7\x86\x17\xcd'用latin-1(或iso-8859-1)解码成了字符串,因为Latin-1编码的特点是:每个字节直接对应一个Unicode码点(0x00-0xFF)。
而当你调用data.encode()时,Python默认用utf-8编码把字符串转成字节串:
- 比如字符串里的
'\xc4'对应Unicode码点U+00C4,它的utf-8编码是b'\xc3\x84' '\xb7'对应U+00B7,utf-8编码是b'\xc2\xb7'- 以此类推,最终得到的就是你看到的
b'\xc3\x84\xc2\xb7\xc2\x86\x17\xc3\x8d',这和你想要的原字节串完全不是一回事。
解决方法
要把这个字符串还原成你需要的字节串,只需要用Latin-1编码反向编码即可,因为Latin-1是唯一能把每个Unicode码点(0x00-0xFF)精准对应回单个字节的编码:
data = '\xc4\xb7\x86\x17\xcd' target_bytes = data.encode('latin-1') print(target_bytes) # 输出 b'\xc4\xb7\x86\x17\xcd'
原理很简单:Latin-1编码时,每个字符串字符的码点值会直接作为字节值输出,完美还原你想要的原始字节序列。
内容的提问来源于stack exchange,提问作者avan989
相关产品推荐
相关产品推荐

