如何处理 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。该函数接受一个参数,但您将其传递给两个参数:
- ":{}"
- “#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)]
我一直在制作一个函数,它接受只有表情符号的列表并将其传输到 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。该函数接受一个参数,但您将其传递给两个参数:
- ":{}"
- “#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)]