Python中字符与字节、十六进制转换异常问题解惑
字符、字节与十六进制互转的编码问题解析
问题出在你使用的默认编码格式上。Python中str.encode()默认采用UTF-8编码,而UTF-8是变长编码:对于Unicode码点在U+0080到U+07FF之间的字符(比如chr(140)对应的U+008C),会用2个字节来编码,所以你得到了b'\xc2\x8c'。
如果想要让0-255范围内的每个字符都对应单字节的字节串,你需要切换到Latin-1(ISO-8859-1)编码——这个编码的设计就是直接把Unicode码点0-255映射为单个字节,完全匹配你的预期。
具体操作示例
字符转字节/十六进制(单字节对应)
- 字符转单字节:
byte_character = chr(140).encode('latin-1'),结果为b'\x8c' - 字符转十六进制:
hex_character = chr(140).encode('latin-1').hex(),结果为'8c'
反向转换
- 十六进制转回字符:
bytes.fromhex('8c').decode('latin-1'),得到chr(140)对应的字符 - 字节转回字符:
b'\x8c'.decode('latin-1'),同样得到目标字符
简单总结:UTF-8适合处理全范围的Unicode字符,而Latin-1是单字节编码,仅覆盖0-255的码点,根据你的实际需求选择对应的编码即可。
内容的提问来源于stack exchange,提问作者David Jaramillo
相关产品推荐
相关产品推荐

