python3中的byte vs str.encode

时间:2018-06-14 11:22:20

标签: python string python-3.x byte

我正在使用python3.5,让

M = '\x09\x00\x00\x00\x01\x89\x02\xdb\xd6\x01\x49\x63\x74'

为什么以下比较的左侧部分不等于右侧部分?

> M.encode() == b'\x09\x00\x00\x00\x01\x89\x02\xdb\xd6\x01\x49\x63\x74'
$ FALSE

两者的类型是bytes。如何从M到达包含上述比较的正确部分的变量?

1 个答案:

答案 0 :(得分:2)

不是编码专家,但无论您选择何种编码,如果不正确,它都会解释字符,结果与字节对象不同。

它适用于纯粹的ascii,但是你的值不会。

一种方法是从bytes提供的字符代码重建ord对象:

M = '\x09\x00\x00\x00\x01\x89\x02\xdb\xd6\x01\x49\x63\x74'
N = b'\x09\x00\x00\x00\x01\x89\x02\xdb\xd6\x01\x49\x63\x74'

M2 = bytes(map(ord,M))

print(N == M2)

收益率True:)