如何将字符串转换为 Unicode 字符

How to transform a string into a Unicode character

我想创建一个非常简单的代码来获取多个字符串输入并显示为 Unicode 字符,例如:

2119 01b4 2602 210c 00f8 1f24 (这应该显示 'Python' 和一些符号)

但我不断收到以下异常:

语法错误:(unicode 错误)'unicodeescape' 编解码器无法解码位置 0-1 中的字节:截断 \uXXXX 转义

我正在尝试使用 '\u' 来保持简单,但如果没有其他方法可以做到这一点,我就不会费心了。

我的代码:

while True:
    string = input()
    print(f'\u{string}', end='')

我搜索并在 Swift 中找到了一些东西,这正是我想在 Python 中做的事情,但我不太明白:.

假设您真的不关心是否使用 \u 语法,这看起来像:

while True:
    string = input()
    print(chr(int(string, 16)), end='')

如果您确实出于某种原因关心:

while True:
    string = input()
    print((br'\u' + string.encode('utf-8')).decode('unicode_escape'), end='')

问题是 unicode 转义优先于 f 字符串格式规范。它将 "\u{str" 视为 4 个字符的转义序列。您可以将其分为两个步骤:创建转义,然后解码。由于unicode字符可以超过4个字节,所以你不妨变大。

>>> import codecs
>>> string = "2119 01b4 2602 210c 00f8 1f24"
>>> for s in string.split(" "):
...     print(codecs.decode(rf"\U{s.zfill(8)}", "unicode-escape"), end="")
... 
ℙƴ☂ℌøἤ 

您不能直接构造 \uxxxx 转义序列,因为这是一种语言构造,但使用 chr 将 Unicode 序数转换为字符更为直接。另外 int(s,16) 会将十六进制字符串转换为整数:

>>> print(''.join(chr(int(x,16)) for x in input().split()))
2119 01b4 2602 210c 00f8 1f24
ℙƴ☂ℌøἤ