首先,对不起我的英语差而近似...
我正在尝试做一个 Python 脚本,它应该检索一个变量,该变量将代表对应于表情符号 (U000xxxx)的 unicode 代码。 程序这部分的最终目标是以表情符号的名义从 unicode 翻译。
因为我知道在 Python 中显示表情符号是print("U000XXXXX")
,所以我在以前的名字之前添加了。 但是当我打印时,最终渲染不是预期的
unicode = "U0001f0cf"
unicode = (f"{unicode}") #OR# unicode = "%s" %unicode
print (unicode) #>>> U0001f0cf
#Expected >>>
我尝试了很多东西,包括.encode()
但 Python 告诉我我不能在字节类型的对象上使用字符串模式(?
这是导致我问题的部分,其余所有过程都可以...... 为了翻译表情符号的名称,从 unicode,我找到了这种方法(从另一个 Stackoverflow 主题制作)
name = emojis.decode(unicode).replace("_"," ").replace(":","")
print(name) #>>> U0001f0cf
而如果我直接输入 unicode 代码,它可以工作......
name = emojis.decode("U0001f0cf").replace("_"," ").replace(":","")
print(name) #>>> :black_joker:
非常感谢任何试图帮助我的人, 祝你晚上愉快
unicode = "U0001f0cf"
unicode = (f"{unicode}")
print(unicode.encode('raw-unicode-escape').decode('unicode-escape'))
这为您提供了而不是
U0001f0cf
您对反斜杠的含义感到困惑。在 Python 源代码中,"U0001f0cf"
对字符串中的单个字符进行编码。您不能通过在前面添加反斜杠来将九个字符的字符串"U0001f0cf"
转换为单个字符,就像在前面连接文字反斜杠会将其转换为换行符一样"n"
也不会将其转换为换行符。
您可以轻松做的是删除U
并通过chr()
将该十六进制数转换为字符。
unicode = "U0001f0cf"
print(chr(int(unicode[1:], 16)))
int("string", base)
将string
转换为指定base
中的数字。
首先从变量中获取数字部分,然后使用chr()
将其转换为 Unicode 等效项,然后使用unicodedata
数据库获取其名称:
import unicodedata as ud
u = 'U0001f0cf'
i = int(u[1:],16)
c = chr(i)
n = ud.name(c)
print(c,n)
输出:
PLAYING CARD BLACK JOKER
您还可以使用范围循环来显示多个表情符号:
import unicodedata as ud
for i in range(0x1f0c1,0x1f0d0):
c = chr(i)
n = ud.name(c)
print(c,n)
输出:
PLAYING CARD ACE OF DIAMONDS
PLAYING CARD TWO OF DIAMONDS
PLAYING CARD THREE OF DIAMONDS
PLAYING CARD FOUR OF DIAMONDS
PLAYING CARD FIVE OF DIAMONDS
PLAYING CARD SIX OF DIAMONDS
PLAYING CARD SEVEN OF DIAMONDS
PLAYING CARD EIGHT OF DIAMONDS
PLAYING CARD NINE OF DIAMONDS
PLAYING CARD TEN OF DIAMONDS
PLAYING CARD JACK OF DIAMONDS
PLAYING CARD KNIGHT OF DIAMONDS
PLAYING CARD QUEEN OF DIAMONDS
PLAYING CARD KING OF DIAMONDS
PLAYING CARD BLACK JOKER
您可以使用ast.literal_eval
。
我们可以构建一个有效的字符串文字,其中包含 python 的 unicode 转义序列。我们只需要添加"
.
from ast import literal_eval
user_input = 'U0001f0cf'
emoji_literal = f'"\{user_input}"'
# ^ ^
# here and here
print(emoji_literal) # prints "U0001f0cf"
repaired_emoji = literal_eval(emoji_literal)
print(repaired_emoji) # prints
emoji_literal
包含"U0001f0cf"
这正是您没有变量时要输入的内容。
然后ast.literal_eval
解释字符串,就好像我们在 python 中将其用作字符串文字一样。
获取Unicode 字符的简单方法是首先包含反斜杠:
unicode = "U0001f0cf"
print (unicode) #>>>
另一种方式由于使用了eval
而更复杂且有点丑陋:
unicode = "U0001f0cf"
unicode = eval(f'"\{unicode}"')
print(unicode) #>>>
在这种情况下,f'"\{unicode}"'
被计算为'"U0001f0cf"'
,f字符串内的字符串被计算("U0001f0cf"
到')。
编辑(因为Tripleee的评论):
eval
与用户输入一起使用时不安全,因为用户可以计算任何代码(包括操作系统命令)。 但只要您只为自己使用代码,这不是问题。/<>替代方案是:
ast.literal_eval
像在袋熊中一样安全评估的答案chr
就像Tripleee的回答一样,这是一个非常优雅和合适的解决方案。