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

2024-10-06 18:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

2119 01b4 2602 210c 00f8 1f24 (这应该显示带有一些符号的“Python”)

但我一直得到以下例外:

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

我正试图使用“\u”来保持简单,但如果没有其他方法,我就不会麻烦了

我的代码:

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

我在Swift中搜索并找到了一些东西,这正是我想在Python中做的,但我不太明白:Print unicode character from variable (swift)


Tags: 字符串代码string字节错误编解码器unicode符号
3条回答

假设您并不真正关心是否使用了\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='')

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

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

问题是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="")
... 
ℙƴ☂ℌøἤ 

相关问题 更多 >