我正在解析文本中的十六进制/ 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中执行此操作?
答案 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))
'ሒ'