从十六进制字符串表示形式创建原始Unicode字符/输入单个反斜杠

时间:2019-05-21 18:03:54

标签: python python-3.x string unicode backslash

我想从字符串十六进制表示形式创建原始unicode字符。也就是说,我有一个字符串s ='\ u0222',它将是'Ȣ'字符。

现在,如果我这样做,这会起作用

>>> s = '\u0222'
>>> print(s)
'Ȣ'

但是,如果我尝试进行串联,它将显示为

>>> h = '0222'
>>> s = r'\u' + '0222'
>>> print(s)
\u0222
>>> s
'\\u0222'

因为可以看到,字符串中实际上是'\\ u'而不是'\ u'。如何从十六进制字符串创建Unicode字符,或者如何输入真正的单个反斜杠?

2 个答案:

答案 0 :(得分:3)

这比我最初预期的要难得多:

code = '0222'
uni_code = r'\u' + code
s = uni_code.encode().decode('unicode_escape')
print(s)

code = b'0222'
uni_code = b'\u' + code
s = uni_code.decode('unicode_escape')
print(s)

答案 1 :(得分:2)

仅为字符串常量输入\u0222,Python解释器会为该语法生成​​一个Unicode代码点。它不是手动构建的。 chr()函数用于生成Unicode代码点。以下适用于字符串或整数:

>>> chr(int('0222',16)) # convert string to int base 16
'Ȣ'
>>> chr(0x222)          # or just pass an integer.
'Ȣ'

FYI ord()是补充功能:

>>> hex(ord('Ȣ'))
'0x222'