如何处理 Python3 中包含表情符号的列表

how to handle list that contains emoji in Python3

我一直在制作一个函数,它接受只有表情符号的列表并将其传输到 utf-8 unicode 和 return unocode 列表。我当前的代码似乎采用多个参数和 return 错误。我是处理表情符号的新手。你能给我一些提示吗??

main.py

def encode_emoji(emoji_list):
    result = []
    for i in range(len(emoji_list)):
        emoji = str(emoji_list[i])
        d_ord = format(ord(":{}:","#08x").format(emoji))
        result.append(str(d_ord))
        break
    return result 


encode_emoji(["","",""])
Result of above code

Traceback (most recent call last):
  File "main.py", line 11, in <module>
    encode_emoji(["","",""])
  File "main.py", line 5, in encode_emoji
    d_ord = format(ord(":{}:","#08x").format(emoji))
TypeError: ord() takes exactly one argument (2 given)

TypeError: ord() takes exactly one argument (2 given)

我认为错误是self-explanatory。该函数接受一个参数,但您将其传递给两个参数:

  1. ":{}"
  2. “#08x”

Here 一些文档供您阅读以备不时之需。

我不知道你打算如何使用这一行获得表情符号的 utf-8 编码:

d_ord = format(ord(":{}:","#08x").format(emoji))

如错误消息所述,ord 将采用单个参数:一个 1 个字符的长字符串,以及 return 一个整数。现在,即使放置上面的代码以便 ord(emoji) 编辑的值 return 被正确地连接到 0x8 作为前缀,这基本上是一个基本随机的特定表示十六进制数 - 不是表情符号的 utf-8 序列。

要将一些文本编码为 utf-8,只需调用字符串本身的 encode 方法。

此外,在 Python 中,人们几乎永远不会使用 for... in range(len(...)) 模式,因为 for 设计精良,可以迭代任何序列或可迭代对象而没有副作用。

您的代码还有一个松散放置的 break 语句,它将在第一个字符后停止任何处理。

不使用 list-comprehension 语法,将表情符号编码为 utf-8 字节字符串的函数只是:

def encode_emoji(emoji_list):
   result = []
   for part in emoji_list:
       result.append(part.encode("utf-8"))

一旦你熟悉了这门语言并理解了理解,那就是:


def encode_emoji(emoji_list):
    return [part.encode("utf-8") for part in emoji_list)]

现在,考虑到您代码中的 #8 模式,您可能误解了 utf-8 的含义,而只是想将表情符号记为有效的 HTML 编码字符参考 - 稍后将嵌入到将编码为 utf-8 的文本中。

在那种情况下,您确实必须调用 ord(emoji) 来获取其代码点,但随后将结果数字表示为十六进制,并替换前导 0x Python 的 hex 调用收益 #:


def encode_emoji(emoji_list):
    return [hex(ord(emoji)).replace("0x", "#") + ";" for emoji in emoji_list)]