如何以编程方式从十六化学中检索unicode char?

alv*_*vas 1 python arrays string unicode hex

给定一个与unicode对应的十六进制列表,如何以编程方式检索unicode char?

例如,鉴于清单:

>>> l = ['9359', '935A', '935B']
Run Code Online (Sandbox Code Playgroud)

如何实现这个清单:

>>> u = [u'\u9359', u'\u935A', u'\u935B']
>>> u
['?', '?', '?']
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它抛出一个SyntaxError:

>>> u'\u' + l[0]
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

\uhhhh转义仅在字符串文字中有效,您不能使用它们将任意十六进制值转换为字符.换句话说,它们是更大语法的一部分,不能单独使用.

将十六进制值解码为整数并将其传递给chr()函数:

[chr(int(v, 16)) for v in l]  # 
Run Code Online (Sandbox Code Playgroud)

可以要求Python将包含文字unichr()文本的字符串解释为带\uhhhh编解码器的Unicode字符串文字,但对于单个代码点感觉有点过分:

[(b'\\u' + v.encode('ascii')).decode('unicode_escape') for v in l]
Run Code Online (Sandbox Code Playgroud)

请注意添加前缀中的双反斜杠.

演示:

>>> l = ['9359', '935A', '935B']
>>> [chr(int(v, 16)) for v in l]
['?', '?', '?']
>>> [(b'\\u' + v.encode('ascii')).decode('unicode_escape') for v in l]
['?', '?', '?']
Run Code Online (Sandbox Code Playgroud)