我正在尝试用Python创建一个数据编码器。我使用自己独特的底层对称算法将一个8位字节编码为另一个8位字节,然后使用相同的算法对其进行解码
我正在使用Python的bytearray函数将字符串转换为字节。但是我遇到了这个问题:十六进制xAB可以用二进制表示为10101011。然而,当我在字符串表示法(“\xAB”)上使用字节数组时,我得到:
>>> byte = bytearray("\xAB", "utf-8")
>>> print(byte)
bytearray(b'\xc2\xab')
很明显,字符串是在\xAB的单个字节中表示的,但是为什么另一个字节\xC2被放在字节数组的前面呢?我使用UTF-8对数据进行编码,因为这是Python的默认值,但是我应该使用不同的编码吗?如何使bytearray只包含表示xAB所需的8位字节
错误字节似乎来自字符串中的转义字符。从字符串到字节编码时,我建议使用python的新符号:
同时,为了调试代码,考虑反转编码以查看Python所看到的(显然不是正确的值)
使用上面提供的更改,将返回正确的值:
"\xAB"
是由单个Unicode字符U+00AB组成的字符串。然后使用UTF-8编码将其转换为字节数组。但在UTF-8中,字符U+00AB被编码为两个字节-C2,AB。在这种情况下,第二个字节恰好与输入字节相同是一种巧合;情况并非总是如此如果要处理字节数组,最好不要使用字符串,因为字符串总是会带来编码方面的麻烦
相关问题 更多 >
编程相关推荐