繁体   English   中英

为什么Python中的bytearray函数将一个字节变成两个字节?

[英]Why does bytearray function in Python turn one byte into two bytes?

我正在尝试在 Python 中创建一个数据编码器。 我使用自己独特的底层对称算法将单个 8 位字节编码为另一个 8 位字节,然后使用相同的算法对其进行解码。

我正在使用 Python 的 bytearray 函数将字符串转换为字节。 但是我遇到了这个问题:十六进制 xAB 可以用二进制表示为1010 1011 然而,当我在字符串表示形式("\\xAB")上使用字节数组时,我得到:

>>> byte = bytearray("\xAB", "utf-8")
>>> print(byte)
bytearray(b'\xc2\xab')

显然,字符串以\\xAB的单个字节表示,但为什么另一个字节\\xC2被添加到字节数组中? 我使用 UTF-8 对数据进行编码,因为这是 Python 的默认设置,但我应该使用不同的编码吗? 如何让 bytearray 只包含表示 xAB 所需的 8 位字节?

"\\xAB"是由单个 Unicode 字符 U+00AB 组成的字符串。 然后使用 UTF-8 编码将其转换为字节数组。 但在 UTF-8 中,字符 U+00AB 被编码为两个字节——C2、AB。 在这种情况下,第二个字节恰好与输入字节相同是巧合; 情况并非总是如此。

如果您想处理字节数组,最好将字符串排除在外,因为字符串总是会带来编码问题。

错误的字节似乎来自字符串中的转义字符。 当从字符串编码到字节时,我建议使用 python 的新符号:

>> byte = bytearray(b"xAB")
>> print(byte)
bytearray(b'xAB')

另外,要调试您的代码,请考虑反转编码以查看 python 看到的内容:(显然不是正确的值)

>>> byte = bytearray("\xAB", "utf-8")
>>> byte.decode()
'«'

使用上面提供的更改,返回正确的值:

>>> byte = bytearray(b'xAB')
>>> byte.decode()
'xAB'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM