![](/img/trans.png)
[英]python FPDF unicode symbols u"\u2611" or u'\U0001F5F9'
[英]Python does not read unicode U + FE0F
假设我将 WhatsApp 聊天导出为 .txt,然后用 python 读取它。 似乎 python 没有为包含 \️ 的表情符号读取正确的 unicode 组合。 例如彩虹旗表情符号🏳️🌈是 U+1F3F3 U+FE0F U+200D U+1F308。 但是,如果我用 python 读取文件,使用下面的代码,标志 emoji 被读取为 \\U0001f3f3\\\U0001f308。 我的代码有问题吗? WhatsApp导出的文件是否不正确? 还是有其他原因导致这种行为如此?
我想编写一个程序来查找聊天中的所有表情符号,但是 \\U0001f3f3\\\U0001f308 不是现有的表情符号,所以我现在收到错误...
def showchat():
f = open("MyChat.txt", "r")
lines = f.readlines()
for l in lines:
print(l)
print(str(l.encode('unicode-escape')))
f.close()
这是一个老问题,但值得解释发生了什么。 问题不在于 Python。 它甚至可能不是 Whatsapp,它可能是用户用来输入表情符号的键盘软件。
彩虹旗的书写方式有两种。 查看来自 Unicode 的emoji-test.txt
文件(在此处找到):
1F3F3 FE0F 200D 1F308 ; fully-qualified # 🏳️🌈 E4.0 rainbow flag
1F3F3 200D 1F308 ; unqualified # 🏳🌈 E4.0 rainbow flag
第一种方式是您期望的方式,第二种方式是 Whatsapp 正在生成的方式。 第一种方式是完全合格的,而第二种方式是不合格的。 您可以在此处找到这些术语的定义,但基本上完全限定意味着包含所有推荐的代码点。 在这种情况下,这意味着FE0F
存在,它明确告诉渲染器这个表情符号应该以图形方式显示,而不是像 ☺ 这样的文本格式。
不合格的格式不应该出现,键盘永远不应该生成它们。 但是几乎所有的渲染器,比如你的浏览器、字体、Whatsapp,都会将它们渲染为表情符号,因为它有助于保持工作正常并看起来不错,以防出现不合格的表情符号。
一般来说,像您这样解析未知输入的软件应该支持表情符号的所有三种变体(完全、最低限度和不合格),因此您应该更改代码以将这两个彩虹旗表情符号识别为有效。
有关更多信息,您可以查看 Unicode Emoji Implementation Notes以及我之前的链接。 如果您还没有,您还想了解零宽度连接器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.