为什么 Emoji 在 Windows 上会变成方框?一次前端排查记录

817 阅读4分钟

🎬 开场:噩耗来袭

前几天,我刚结束一个移动端模块的开发,心想着终于可以睡个安稳觉。结果,第二天晚上测试就甩了个 bug 给我:

“在移动端输入的某些 Emoji,在 PC 浏览器打开后,显示成了方框。”

image.png 那一瞬间,我差点原地爆炸。心里嘀咕:
👉 “测试大姐,能不能换个角度测?真实用户真会在 PC 端追着看 Emoji 吗?!”

我立马把这个“噩耗”分享给工位邻居,同事直接笑喷:

“说道:一个测试根本不考虑实际使用场景”

气氛很快进入 吐槽大会模式,但心里还是清楚:再不情愿,总归也还是个问题,还是得给个方案或者原因。

🕵️ 第一步:怀疑人生

第二天一早,例行早会结束,为了缓解心情,习惯性先刷了下热搜 🥱

然后进入工作状态,开始排查。
我先在自己的 Mac Chrome 上测试了一波:
✅ Emoji 显示正常。

于是我反馈给测试:

“你看,我这Emoji可以正常显示的啊“

没想到测试直接回击:

“我这 Windows Chrome 就不行啊,你能保证所有用户都用 Mac 吗?”

当时内心一万匹草泥马奔腾而过:
👉 “这是什么神逻辑?难道要我送每个用户一台 MacBook 才算解决问题?”

🔎 第二步:冷静分析,找到根源

为了避免争吵无果,我换到测试的 Windows10 环境复现。果然,部分 emoji 真变成了“□ □ □”。 这时我开始冷静思考:

  • 既然 同一个浏览器(Chrome) ,为什么 Mac 正常,Windows 出问题
  • 问题多半不在代码,而是在 系统层面

经过一番调研,找到了问题的根源:

  • Windows10 的系统字体库“太老了”,只支持到 Unicode 12.0
  • 一些新 emoji(比如“比心手势比心收拾”、“紫色恶魔😈”)是在 Unicode 13.0+ 里新增的。

用一个比喻来说:
这就像你拿着一本 2019年的新华字典 去查 2023 年新增的“网络热词”,结果自然是:无法正常显示。

Chrome 浏览器本身能兼容最新 emoji,但在 Windows 上,它渲染时必须“借用”系统字库。
如果系统字库“不认识”,再强大的 Chrome 也只能摊手,显示成小方框。

🛠️ 第三步:寻找解法

明白了原理之后,我脑子里过了一遍可能的解决方案:

  • 让用户升级系统:呵呵,想啥呢?能劝动一个用户升级 Windows,怕不是比劝老板涨工资还难。
  • 前端自定义 emoji 字体库:可行,但代价太大,要维护一堆资源,显然不现实。

最终,我找到了一个折中方案:

👉 安装Emoji Swap 浏览器扩展,它的作用就是把系统不认识的新Emoji,换成Chrome能识别的图片格式,让空白方框变成可正常显示的表情。

具体操作步骤

  1. 打开Chrome应用商店:在Chrome地址栏输入chrome://extensions/,点击页面左侧的“打开Chrome网上应用店” image.png

  2. 搜索并安装扩展:在应用商店搜索框输入Emoji Swap,找到对应扩展后,点击“添加至Chrome”,弹窗提示“确认添加”时,选择“添加扩展程序”; image.png

  3. 刷新页面生效:安装完成后,Chrome右上角会出现Emoji Swap的小图标。重启Chrome后,再次查看之前显示方框的Emoji的网页,此时原来的方框变成了正常的Emoji显示在了网页中。 211758458986_.pic_hd.jpg

Emoji Swap它就像一个“临时翻译官”:

  • 检测系统不认识的 emoji
  • 替换成 Chrome 能识别的图片
  • 让“方框”重新变成“表情” 我把扩展丢给测试:

“安装到Chrome扩展中,就正常显示了。”

😅 最后一幕:问题落地,达成共识

当我找到问题根源时,心里其实已经松了一口气:并不是代码实现出了纰漏,而是 Windows 10 的系统字符库限制,导致部分新 emoji 无法显示。

到这里,问题算是圆满落地了。我们一致确认:

  • 从代码层面,没有问题;
  • 从用户体验层面,我们也提供了替代方案。

整个过程,从最初的无奈,到原因水落石出,再到双方协调一致,氛围一下子轻松了许多,也算是“体面收场”。

📌 我的思考与最佳实践

通过这次“Emoji 方框事件”,我有几点体会:

  1. Bug 不一定是代码问题
    很多前端“奇怪的 bug”,其实根源在 系统环境浏览器兼容性

  2. 与测试沟通要有“翻译官思维”
    测试只关心结果,而开发更关注原理。
    与其争论对错,不如给对方一个能落地的解决方案。