Python:将空间(和其他特殊字符,如。,)转换为相应的unicode表示

时间:2016-11-28 10:38:49

标签: python string unicode

我正在尝试将阿拉伯语短语转换为其对应的unicode表示字符串,它可以正常用于阿拉伯语文本。

>>> a = ' مساء الخير'
>>> a.strip().decode('utf-8').encode('unicode-escape')
'\\u0645\\u0633\\u0627\\u0621 \\u0627\\u0644\\u062e\\u064a\\u0631'

但是,我还希望将空格字符转换为其unicode表示形式('\ u0020')。我观察与其他字符类似的行为,如'。',','等。我最终想要获取字符串中每个字符的unicode值作为列表(简单地用分隔符拆分当前字符串) '\ u'给出了不正确的分割,因为空格字符与之前的unicode表示相结合)

>>> a.strip().decode('utf-8').encode('unicode-escape').split('\\u') 
['', '0645', '0633', '0627', '0621 ', '0627', '0644', '062e', '064a', '0631']

例如。我想要[...'0621','0020'...]而不是当前[...'0621'...]

2 个答案:

答案 0 :(得分:2)

删除你不需要它的第一个空格很好,但是如果你想保留另一个空格,那么从字符串构建一个unicode字符列表并单独处理字符会更简单:

[ '%04x' % (ord(i),) for i in a.strip().decode('utf8') ]

或者如果您喜欢使用format(现在更好)

[ '{0:04x}'.format(ord(i)) for i in a.strip().decode('utf8') ]

两者均按预期收益:

['0645', '0633', '0627', '0621', '0020', '0627', '0644', '062e', '064a', '0631']

答案 1 :(得分:1)

您首先没有创建(扫描/读取)字符串作为unicode字符串的任何特殊原因?

In [14]: a = u' مساء الخير'

In [15]: [hex(ord(i)) for i in a]
Out[15]: 
['0x20',
'0x645',
'0x633',
'0x627',
'0x621',
'0x20',
'0x627',
'0x644',
'0x62e',
'0x64a',
'0x631']