【发布时间】:2021-05-21 07:35:23
【问题描述】:
python2 和 python3 处理字符串的方式和字节不同,因此在 Python3 中打印包含非 ASCII 字符的十六进制字符串与 Python2 不同。
为什么会发生这种情况,我怎么能像 Python2 那样在 Python3 中打印一些东西? (使用 ASCII 字符或 UTF-8 解码字节字符串时效果很好)
Python3:
$ python3 -c 'print("\x41\xb3\xde\x41\x42\x43\xad\xde")' |xxd -p
41c2b3c39e414243c2adc39e0a
Python2:
$ python2 -c 'print "\x41\xb3\xde\x41\x42\x43\xad\xde"' |xxd -p
41b3de414243adde0a
\x0a 是 newline 因为 print 添加了它。
如何在 python3 中打印“\xb3”?它添加了“\xc2\xb3”,而只是添加了“\xb3”。
$ python3 -c 'print("\xb3")' |xxd
00000000: c2b3 0a ...
$ python2 -c 'print "\xb3"' |xxd
00000000: b30a ..
【问题讨论】:
-
您能说明一下您到底想要达到什么目标吗?您想写入没有任何(内部和外部)编码的原始字节吗?
-
是的,我想像 Python2 一样使用 Python3 进行打印。使用 Python3 我无法打印“\xb3”,Python3 打印“\xc2\xb3”,我只想打印“\xb3”。我已将此示例添加到问题中。
-
不要太迂腐,但你知道Python2和Python3中的
"\xb3"不一样吗?与 Python3 中的 Python2 相同的关闭是b"\xb3"。所以问题“我如何在 Python3 中像在 Python2 中一样将"\xb3"写入标准输出”和“如何在 Python3 中将字节值 0xb3 写入标准输出”是两个不同的问题。简而言之,您是否已经有了字符串文字并想写它,或者您是否有字节值并想写它? -
是的,我知道在 Python3 中是 b"\xb3";这就是问题所在;我怎么能打印 b"\xb3";如果我做 bytes.fromhex("41b3de414243adde0a") 我得到 b'A\xb3\xdeABC\xad\xde\n' 没关系;但是当我打印时它添加了“\xc2\xb3”。就是那个问题。你不是迂腐的,别担心。我们在互联网上。
-
更多信息:要打印它,我尝试使用 utf-8 并忽略,替换。我也尝试过 latin_1。在问这里之前我看过docs.python.org/3/library/codecs.html
标签: python python-3.x