每当我尝试将一个字符串(恰好是十六进制值)转换为字节字符串时,都会得到奇怪的(似乎丢失/剥离)输出。(我只能用2.7,在linux UTF-8终端和windows上测试)
>>> from binascii import unhexlify, hexlify
>>> s = '1234beef'
>>> s.decode('hex')
'\x124\xbe\xef'
>>> unhexlify(s)
'\x124\xbe\xef'
乍一看,我似乎在减少输出:
^{pr2}$但结果却没有丢失,可能是迭代的问题?在
>>> hexlify(unhexlify(s)) # \x3 was never lost
'1234beef'
>>> unhexlify(s)=='\x12\x34\xbe\xef'
>>> '\x12\x34\xbe\xef'[1]
'4'
这似乎是一个输出/显示问题,因为将二进制值写入文件会显示3仍然存在
print '\x12\x34\xbe\xef'[1:3],
# in the file
34be0a
这是通过获取每个字节的ord来备份的
>>> [ord(i) for i in unhexlify(s)]
[18, 52, 190, 239]
所有这些让我相信我打印bytestrings的方式有问题。在
>>> str('\x12\x34\xbe\xef')
'\x124\xbe\xef'
>>> repr('\x12\x34\xbe\xef')
"'\\x124\\xbe\\xef'"
那么python社区如何以Ascii(或utf)的形式输出到stdout bytestrings呢?在
正如你所推断的,一切都在正常运转:你只是被一个不寻常的巧合所吸引。当Python可以显示更好的表示时,她会这样做:因此},而{}而不是{}。或者,在你的情况下:
"\t"
而不是{数字52(以10为基数)映射到ascii中的数字}。在
4
,因此Python显示的是"4"
,而不是{如果您选择了一个不同的字符串来处理,您不会认为有任何内容被删除,尽管您可能会对它的表示感到惊讶:
^{pr2}$相关问题 更多 >
编程相关推荐