我过去曾在python3.2中搞砸过,但现在我面临着一个关于Python中utf-8编码的混乱局面。
例如,假设我有一段代码:
'א'.encode()
结果是b'\xd7\x90'
(或0xD790
),但是这是错误的:希伯来语字符Alef的utf-8编码应该是0x5D0
。
但是,使用utf-16作为编码返回正确的十六进制值,前缀为0xFFFE
:
^{pr2}$
这将返回b'\xff\xfe\xd0\x05'
。在
我觉得我好像在我的理解中遗漏了一些基本的东西,
所以用户们,请帮助教育我!在
Tags:
否,
א
的unicode代码点为0x5d0:当您将其编码为
^{pr2}$utf-8
时,您将得到一种表示该特定代码点的可能方法。utf-16
是另一种表示方法,它用2个字节表示每个码位。之所以使用前缀为\xff\xfe
,是因为encode('utf-16')
生成了一个字节顺序标记(BOM)。如果明确指定字节顺序,则不会生成:0x5d0
根本不是编码;它只是一个数字。是的,希伯来语字母ALEF是U+05D0,但是UTF-8不是码位到字节的转录。相反,它在每个字节的msb中使用一组固定的位,并用码位值的可变位数填充lsb。在插入110xxxxx 10xxxxxx我们得到:
^{pr2}$二进制中的unicode codepoint of א is U+05D0,或{}。11位代码点UTF-8编码ABCDEFGHIJKis
或者,在Python表示法中,
b'\xd7\x90'
。在相关问题 更多 >
编程相关推荐