字符串到十六进制编码问题.by encode()模块,但失败

时间:2019-03-29 06:41:52

标签: python encoding utf-8

编码结果不正确

我试图通过encode()将字符串转换为十六进制格式的字节,但是失败了。 下面是我的代码,我希望\ xFF会变成\ xFF,但最终结果是\ xc3。

我可以知道为什么吗?

输入:x ="\x00\x00\xFF\x00\xFF\x00"

输入:x.encode()

输出:b'\x00\x00\xc3\xbf\x00\xc3\xbf\x00'

2 个答案:

答案 0 :(得分:2)

string.encode()的默认编码为UTF-8。 UTF-8使用数字十进制代码0-127作为其数值来编码字符。根据要编码的字符,它将大于127的值编码为两个或更多字节。

0的UTF-8编码为0。'\ xFF'(255)的UTF-8编码为'\ xc3 \ xbf'。

因此,如果用输入的6个字节中的每个字节的UTF-8编码替换输入,则会得到输出。

答案 1 :(得分:0)

如果您使用等效字节对象(而不是编码字符串),则可以这样获得它:

>>> x ="\x00\x00\xFF\x00\xFF\x00"
>>> ba = bytearray(ord(b) for b in x)
>>> bytes(ba)
b'\x00\x00\xff\x00\xff\x00'