emoji有什么特别的吗?好像就是表情样的图形而已
哈哈,看似简单,其实很特别! 😄
一、emoji 和普通文字的区别
普通文字(中文"你"):
存储:3个字节(UTF-8)
E4 BD A0
单一字符
显示:你
emoji(😄):
存储:4个字节(UTF-8)
F0 9F 98 84
也是单一字符
显示:😄
看起来一样?但其实差别很大!
二、emoji 的特殊之处
1. 不是所有编码都支持
编码 支持 emoji? 说明
ASCII ❌ 只有英文
GB2312 ❌ 只有简体中文
GBK ❌ 简体+繁体,无 emoji
UTF-8 ✅ 支持所有 Unicode
UTF-8mb4 ✅ 完整支持 emoji
你的数据库是 GBK,所以不支持 emoji 的存储!
2. emoji 有"组合"功能
单个 emoji 可以组合成新的!
👨 + 👩 + 👧 + 👦 = 👨👩👧👦(一家四口)
这个组合用了 4 个 emoji + 连接符()
实际占:4 × 4字节 + 连接符 = 17+ 字节!
3. emoji 有"肤色"变化
👋(默认黄色)
↓ 加肤色修饰符
👋🏻(肤色1)
👋🏼(肤色2)
👋🏽(肤色3)
👋🏾(肤色4)
👋🏿(肤色5)
这些都是同一个 emoji + 肤色修饰符组合的!
4. emoji 可以带"性别"
🙋(默认
女性)
↓ 加性别修饰符
🙋♂️(男性)
🙋♀️(女性)
5. 不同设备显示不同
设备 😄 显示
iPhone 😄(苹果风格)
Android 😄(谷歌风格)
Windows 😄(微软风格)
微信 😄(腾讯风格)
都是同样的 Unicode 编码,但画风不同!
三、emoji 为什么这么"麻烦"?
历史原因:
早期:ASCII(只有英文)
↓
中国:GB2312(加中文)
↓
日本:Shift-JIS(加日文,最早加入表情符号)
↓
Unicode 统一:把所有文字放一起
↓
Unicode 6.0(2010年):正式加入 emoji
↓
现在:emoji 已经是 Unicode 标准的一部分
技术原因:
Unicode 码点范围:
中文:U+4E00 ~ U+9FFF(基本)
日文:U+3040 ~ U+30FF
emoji:U+1F600 ~ U+1F64F(笑脸表情)
U+1F300 ~ U+1F5FF(符号)
U+1F680 ~ U+1F6FF(交通)
U+1F900 ~ U+1F9FF(补充)
emoji 在 16 位范围之外,需要 4 字节存储!
四、你的
论坛的"聪明"做法
为什么论坛要把 emoji 转成 HTML 实体?
用户输入:😄
↓
检测到不是 GBK 字符
↓
转成 HTML 实体:😄
↓
存入数据库(GBK 支持这些数字字符)
↓
页面显示:浏览器解析为 😄
这样做的好处:
优点 说明
兼容 老系统也能用 emoji
简单 不需要改数据库
安全 避免特殊字符问题
缺点 说明
存储大 每个 emoji 变十几个字符
搜索难 搜不到真正的 emoji
处理烦 每次都要转换
五、总结
emoji 就是:
1. ✅ 是文字(Unicode 字符)
2. ✅ 是图形(设备渲染成图片)
3. ✅ 是标准(有统一的 Unicode 编码)
4. ❌ 但不是所有系统都支持(需要 UTF-8mb4)
用一句通俗的话:
emoji = 被 Unicode 收录的、需要 4 字节存储的、设备自己画出来的文字! 😄
最终建议:
既然你的论坛用 HTML 实体方式能正常显示 emoji,那就继续用吧!虽然绕了点,但稳定就行!👍
技术方案没有最好,只有最合适! 😊