【问题标题】:Why does the emoji ☘️ sometimes look like ☘?为什么表情符号☘️有时看起来像☘?
【发布时间】:2021-05-15 15:41:41
【问题描述】:

我试图识别文本文件中的表情符号。它看起来像这样:☘️。 但是当我尝试为☘️解析文件时,我找不到它。事实证明,我只能在寻找 ☘ 时识别这个表情符号。

如果您的浏览器以不同方式呈现它们,以下是两个表情符号并排的屏幕截图:

如何自动将第一个表情符号 (☘️) 转换为第二个 (☘)?我不确定这是否可能或如何可能,因为它们应该已经相同了。

【问题讨论】:

  • 它们和我一模一样。 stack.imgur.com/Y2LrH.jpg
  • 似乎您正在处理variation selector 问题:Unicode 有 16 个变体选择器,VS15 和 VS16 分别用于请求文本(黑白)表情符号或彩色表情符号,而不是任何默认值是(可能是)。您的三叶草的第一个版本后面是 VS16,第二个版本后面什么都没有。所以答案是检查并去掉变体选择器。简单地说,第一个是“三叶草(颜色)”,而第二个是“三叶草”。在您的系统上,默认值为文本。
  • 它们在Firefox中看起来不同,它们是不同的序列;第一个是 \u2618 代码点的“表情符号版本”。实际上,表情符号版本由相同的代码点编码,后跟 \ufe0f “表情符号变体选择器”代码点。这是一个有效的问题,应该重新打开。
  • @CharlesDuffy 当然,为什么不呢?如果他们以编程方式进行搜索并且他们尝试的每个字符串都有效,但例如这个失败了。毕竟,该帖子已标记为python
  • @Masklinn, ...如果他们包含一个minimal reproducible example 和 Python 代码,足以在不更改运行时重现问题,我完全同意这是明确的话题。尽管如此,我不明白为什么有人不能在非开发环境中遇到同样的问题——在浏览器中按 ctrl+f 并将两个代码点之一粘贴到搜索框中,而另一个代码点在页面中表示,f/e -- 我们的范围要求问题是软件开发独有的

标签: python unicode


【解决方案1】:

cmets 中的信息如此之多,但没有人将其全部写成答案。

您的第一个表情符号实际上是两个不同的 Unicode 代码点的组合,U+2618 SHAMROCKU+FE0F VARIATION SELECTOR-16。第二个充当第一个的修饰符,如果显示链的所有部分都支持它,则将其转换为颜色渲染。有些没有,我在 Windows 上的 Chrome 浏览器显示的两个表情符号相同。

第二个表情符号只是没有修饰符的单个代码点 U+2618。

使用 Python 将所有出现的第一个转换为第二个是微不足道的:

s = s.replace('\u2618\ufe0f', '\u2618')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多