2017-07-03 102 views
0

给定一个对应于unicode的十六进制列表,如何以编程方式检索unicode char?如何以编程方式从hexademicals中检索unicode字符?

E.g.鉴于名单:

>>> l = ['9359', '935A', '935B'] 

如何实现这个名单:

>>> u = [u'\u9359', u'\u935A', u'\u935B'] 
>>> u 
['鍙', '鍚', '鍛'] 

我已经试过这一点,但它抛出一个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 

回答

8

\uhhhh逃逸是唯一有效的字符串文字,您不能使用这些将任意十六进制值转换为字符。换句话说,它们是更大语法的一部分,不能单独使用。

解码的十六进制值到一个整数,并将它传递给unichr() function

[unichr(int(v, 16)) for v in l] 

可以要求的Python解释包含文字\uhhhh文本字符串为Unicode字符串字面量与unicode_escape codec,但感觉像个别码点矫枉过正:

[('\\u' + v).decode('unicode_escape') for v in l] 

请注意在t中的双反斜杠他添加了前缀。

演示:

>>> l = ['9359', '935A', '935B'] 
>>> [unichr(int(v, 16)) for v in l] 
[u'\u9359', u'\u935a', u'\u935b'] 
>>> [('\\u' + v).decode('unicode_escape') for v in l] 
[u'\u9359', u'\u935a', u'\u935b'] 
+0

真棒!感谢@MartijnPieters! – alvas

相关问题