2024-10-03 00:32:23 发布
网友
test = unicode('\x03B', 'utf-16BE', 'ignore')
产生胡言乱语。我想测试是一个分号。如果我用'\x03~'替换十六进制,我得到一个分号。你知道吗
'\x03~'
我的问题是为什么?我以为分号的unicode值是003B?你知道吗
谢谢!你知道吗
有多个字符看起来像分号。自从你 提到'\x03~'和utf-16be编码,您一定是指 希腊问号。(下面,我将'\x03~'表示为b'\x03~'以使这个答案有效 在Python2.7和Python3中。)
b'\x03~'
In [207]: b'\x03~'.decode('utf-16be') Out[207]: u'\u037e' In [208]: import unicodedata as UDAT In [209]: UDAT.name(u'\u037e') Out[209]: 'GREEK QUESTION MARK' In [206]: u'\N{GREEK QUESTION MARK}' == u';' Out[206]: True In [198]: u'\N{GREEK QUESTION MARK}'.encode('utf-16be') Out[198]: b'\x03~'
因此,用utf-16be编码的unicode U+037E(希腊问号)是b'\x03~',而不是b'\x03'。你知道吗
b'\x03'
请注意,这与U+003B(分号)不同:
In [211]: u';'.encode('utf-16be') Out[211]: b'\x00;' In [212]: UDAT.name(u';') Out[212]: 'SEMICOLON' In [214]: hex(ord(u';')) Out[214]: '0x3b' In [216]: u'\u003b' == u'\N{SEMICOLON}' Out[216]: True In [217]: u'\N{GREEK QUESTION MARK}' == u'\N{SEMICOLON}' Out[217]: False
您未能正确指定UTF-16编码的分号,它由两个八位字节\x00和\x3B组成。正确的说法是:
\x00
\x3B
test = unicode('\x00\x3B', 'utf-16BE', 'ignore')
这将产生一个Unicode分号,如预期的那样。你知道吗
有多个字符看起来像分号。自从你 提到
'\x03~'
和utf-16be编码,您一定是指 希腊问号。(下面,我将'\x03~'
表示为b'\x03~'
以使这个答案有效 在Python2.7和Python3中。)因此,用utf-16be编码的unicode U+037E(希腊问号)是
b'\x03~'
,而不是b'\x03'
。你知道吗请注意,这与U+003B(分号)不同:
您未能正确指定UTF-16编码的分号,它由两个八位字节
\x00
和\x3B
组成。正确的说法是:这将产生一个Unicode分号,如预期的那样。你知道吗
相关问题 更多 >
编程相关推荐