在Python中将unicode代码点转换为unicode字符

时间:2014-05-26 00:31:34

标签: python python-3.x unicode utf-8

我正在解析文本中的十六进制/ unicode转义。

所以我有一个像

这样的输入字符串
\x{abcd}

这很容易 - 我最后得到一个数组["ab", "cd"]我称之为digits并执行此操作:

return bytes(int(d, 16) for d in digits).decode("utf-8")

所以我基本上接受{}作为UTF-8编码字符之间的所有内容并将其转换为字符。简单。

>>> bytes(int(d, 16) for d in ["e1", "88", "92"]).decode("utf-8")
'ሒ'

但我想采取另一种方式:\u{1212}应该产生相同的角色。问题是,我不知道如何将结果["12", "12"]视为unicode代码点而不是UTF-8字节来再次获得ሒ字符。

我如何在python 3中执行此操作?

2 个答案:

答案 0 :(得分:4)

将数字解析为base-16后,您可以使用chr

>>> chr(int('1212', 16))
'ሒ'
>>> '\u1212'
'ሒ'

如果你在某个字符串中全局替换它,那么使用带有替换函数的re.sub可以简化这一点:

import re

def replacer(match):
    if match.group(2) == 'u':
        return chr(int(match.group(3), 16))
    elif match.group(2) == 'x':
        return  # ...

re.sub(r'(\\(x|u)\{(.*?)\})', replacer, r'\x{abcd} foo \u{1212}')

答案 1 :(得分:1)

你的意思是像这样编码字符串吗?

>>> print u"\u1212"
ሒ
>>> print u"\u00A9"
©

编辑:

如果你以字符串开头,那只是

>>> chr(int("1212", 16))
'ሒ'