如何从字符串中显示unicode语法(\ uXXXX)?

时间:2016-12-13 15:58:30

标签: python unicode

我尝试使用" 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))

1 个答案:

答案 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'