Python十六进制转义输出异常:原因分析与解决方法咨询
问题原因及解决办法
为什么会出现异常?
- 你用的是Python 3的
print()函数,它本质是处理Unicode字符串,而非原始字节流。当你传入'\xbe\xba\xfe\xca'这类包含ASCII范围外(>0x7F)的字符时,print会自动把字符串按终端默认编码(一般是UTF-8)编码后输出。 - 举个具体例子:
\xbe对应Unicode字符"¾",UTF-8编码会拆成c2 be两个字节;\xfe对应"þ",UTF-8编码是c3 be;\xca对应"Ê",UTF-8编码是c3 8a。这就导致xxd读取到的是编码后的多字节序列,和你要的原始单字节完全不符。
直接解决方法
方法1:Python直接输出原始字节流
绕过print的编码处理,直接用sys.stdout.buffer写入字节对象,这是最可靠的方式:
python -c "import sys; sys.stdout.buffer.write(b'\xbe\xba\xfe\xca\n')" | xxd
这里b''表示字节字符串,sys.stdout.buffer.write会直接把原始字节输出到标准输出,不会做任何编码转换,xxd就能得到你要的be ba fe ca 0a结果。
方法2:强制Python用单字节编码输出(临时方案)
让print用Latin-1编码输出(Latin-1会把每个Unicode字符直接映射成单字节):
python -c "import sys; sys.stdout.reconfigure(encoding='latin-1'); print('\xbe\xba\xfe\xca')" | xxd
但这种方法依赖编码设置,不如直接写字节流稳妥,适合临时测试用。
方法3:继续用bash printf(你已经在用的方案)
printf本身就是直接输出原始字节,不会经过编码处理,命令如下:
printf '\xbe\xba\xfe\xca\n' | xxd
内容的提问来源于stack exchange,提问作者Vedant36
相关产品推荐
相关产品推荐

