我尝试使用" unicode-display",raw string等编码方法,但它没有用。我正在为python中的聊天机器人编写一个模块,它涉及从用户那里获取一个角色并在" \ uXXXX"中显示它。格式而不是它变成相应的字符。 这是我的代码:
import discord
from discord.ext import commands
import unicodedata as ud
class Unicode:
"""Encode Unicode characters!"""
def __init__(self, bot):
self.bot = bot
@commands.command()
async def unicode(self, *, character):
"""Encode a Unicode character."""
try:
data = ud.normalize('NFC', character)
except ValueError:
data = '<unknown>'
await self.bot.say(data)
def setup(bot):
bot.add_cog(Unicode(bot))
答案 0 :(得分:2)
如果您只需要Unicode代码点,请获取ord()
值并将其表示为十六进制值:
'U+{:04X}'.format(ord(data[0]))
对于给定字符,这将使用至少4个十六进制数字(大写),如果字符在basic multilingual plane之外,则更多。我在这里选择了广泛接受的U+hhhh
格式而不是Python / JSON / Javascript转义序列格式。
演示:
>>> data = '⛄'
>>> unicode_codepoint = 'U+{:04X}'.format(ord(data[0]))
>>> print(unicode_codepoint)
U+26C4
您还可以将数据编码为JSON字符串,或使用ascii()
function创建带有\u
转义序列的字符串(带引号):
>>> import json
>>> print(json.dumps(data))
"\u26c4"
>>> print(ascii(data))
'\u26c4'
这有一个缺点,你现在必须再次删除这些引用字符(使用str.strip()
)。
两种方法之间的区别在于,编码为JSON会为BMP之外的字符生成UTF-16 surrogate pairs,使用ascii()
您将获得\Uhhhhhhhh
Python转义码:
>>> data = ''
>>> print('U+{:04X}'.format(ord(data[0])))
U+1F596
>>> print(json.dumps(data))
"\ud83d\udd96"
>>> print(ascii(data))
'\U0001f596'