2017-07-03 74 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

相關問題