文本样式与 Emoji 样式:同一个字符为何有 “两幅面孔”?
你有没有碰到一个问题,你复制了一个Emoji,但是粘贴出来却变成了黑白的。同一个字符为什么会有两幅面孔,一个是黑白的,一个是彩色的。这里面有什么门道?
字符怎么显示到底是有谁决定的
一个字符怎么显示是不确定的,可能显示为黑白的普通字符,也可能显示为彩色的Emoji。这而是由渲染引擎、当前字体以及字符在 Unicode 标准中的默认呈现属性共同决定的。比如在纯文本环境中,就会显示为黑白的普通字符,而在聊天软件中,就会显示为彩色的Emoji。
为了消除这种不确定性,明确指定显示那种样式,我们需要在字符后面增加一个特殊字符,告诉系统怎么显示。
变体选择符:字符的“样式开关”
这个能让字符显示不同样式的特殊字符就是“变体选择符”。变体选择符通常是不可见的,你看不到它的存在。
变体选择符包括两个:
U+FE0E (变体选择符-15 / VS15):强制将字符显示为文本样式(通常是黑白、单一颜色)。
U+FE0F (变体选择符-16 / VS16):强制将字符显示为Emoji样式(通常是彩色、图像化)。
举个例子,笑脸符号“☺”的编码是 U+263A。添加不同的变体选择符后,显示效果如下:
基础字符
变体选择符
显示效果
样式说明
U+263A
U+FE0E
☺
文本样式
U+263A
U+FE0F
☺️
Emoji样式
在Emoji出现之前,Unicode联盟就已经收录了大量的符号类字符(如:☹︎ ☺︎ ♠︎ ♣︎ ♥︎ ♦︎)。比如这个笑脸“☺”符号,跟后来的Emoji ☺️撞脸了。所以 Unicode联盟在设计 Emoji 编码的的时候没有重新设计一个,而是借用这个笑脸的编码。方法就是增加一个特殊的字符来实现Emoji。可以理解为在原来黑白的字符后面,增加一个修饰符,就变成了彩色的Emoji。这样做既保留了历史数据的向下兼容,又满足了现代设备的视觉表达需求,真是一个巧妙的设计。
特殊情况
还有一类特殊字符:键帽符号,包括 #、* 以及数字 0–9。
这类字符跟普通符号不一样:只加 U+FE0F 只能变成彩色符号,不能变成Emoji。
想要显示成 #️⃣、1️⃣ 这种键盘按钮样式,必须用三段组合:原始字符 + U+FE0F(强制 Emoji) + U+20E3(结合用封闭键帽符)
U+20E3 是一个专门的包裹型特殊字符,作用就是给前方字符套上方形按键边框;它不能单独显示,只能依附在前一个字符上,这也是键帽 Emoji 必须多一个后缀的原因。
编码序列
显示效果
说明
U+0023
#
普通文本字符
U+0023 + U+FE0F
#️
强制 Emoji 样式(无键帽,仅颜色变化)
U+0023 + U+20E3
#⃣
键帽效果,但可能是黑白/单色
U+0023 + U+FE0F + U+20E3
#️⃣
完整的彩色键帽 Emoji
普通字符和Emoji对照表
编码
字符
文本样式
Emoji样式
0023
#
#︎
#️⃣
002A
*
*︎
*️⃣
0030
0
0︎
0️⃣
0031
1
1︎
1️⃣
0032
2
2︎
2️⃣
0033
3
3︎
3️⃣
0034
4
4︎
4️⃣
0035
5
5︎
5️⃣
0036
6
6︎
6️⃣
0037
7
7︎
7️⃣
0038
8
8︎
8️⃣
0039
9
9︎
9️⃣
00A9
©
©︎
©️
00AE
®
®︎
®️
203C
‼
‼︎
‼️
2049
⁉
⁉︎
⁉️
2122
™
™︎
™️
2139
ℹ
ℹ︎
ℹ️
2194
↔
↔︎
↔️
2195
↕
↕︎
↕️
2196
↖
↖︎
↖️
2197
↗
↗︎
↗️
2198
↘
↘︎
↘️
2199
↙
↙︎
↙️
21A9
↩
↩︎
↩️
21AA
↪
↪︎
↪️
231A
⌚
⌚︎
⌚️
231B
⌛
⌛︎
⌛️
2328
⌨
⌨︎
⌨️
23CF
⏏
⏏︎
⏏️
23E9
⏩
⏩︎
⏩️
23EA
⏪
⏪︎
⏪️
23EB
⏫
⏫︎
⏫️
23EC
⏬
⏬︎
⏬️
23ED
⏭
⏭︎
⏭️
23EE
⏮
⏮︎
⏮️
23EF
⏯
⏯︎
⏯️
23F0
⏰
⏰︎
⏰️
23F1
⏱
⏱︎
⏱️
23F2
⏲
⏲︎
⏲️
23F3
⏳
⏳︎
⏳️
23F8
⏸
⏸︎
⏸️
23F9
⏹
⏹︎
⏹️
23FA
⏺
⏺︎
⏺️
24C2
Ⓜ
Ⓜ︎
Ⓜ️
25AA
▪
▪︎
▪️
25AB
▫
▫︎
▫️
25B6
▶
▶︎
▶️
25C0
◀
◀︎
◀️
25FB
◻
◻︎
◻️
25FC
◼
◼︎
◼️
25FD
◽
◽︎
◽️
25FE
◾
◾︎
◾️
2600
☀
☀︎
☀️
2601
☁
☁︎
☁️
2602
☂
☂︎
☂️
2603
☃
☃︎
☃️
2604
☄
☄︎
☄️
260E
☎
☎︎
☎️
2611
☑
☑︎
☑️
2614
☔
☔︎
☔️
2615
☕
☕︎
☕️
2618
☘
☘︎
☘️
261D
☝
☝︎
☝️
2620
☠
☠︎
☠️
2622
☢
☢︎
☢️
2623
☣
☣︎
☣️
2626
☦
☦︎
☦️
262A
☪
☪︎
☪️
262E
☮
☮︎
☮️
262F
☯
☯︎
☯️
2638
☸
☸︎
☸️
2639
☹
☹︎
☹️
263A
☺
☺︎
☺️
2640
♀
♀︎
♀️
2642
♂
♂︎
♂️
2648
♈
♈︎
♈️
2649
♉
♉︎
♉️
264A
♊
♊︎
♊️
264B
♋
♋︎
♋️
264C
♌
♌︎
♌️
264D
♍
♍︎
♍️
264E
♎
♎︎
♎️
264F
♏
♏︎
♏️
2650
♐
♐︎
♐️
2651
♑
♑︎
♑️
2652
♒
♒︎
♒️
2653
♓
♓︎
♓️
265F
♟
♟︎
♟️
2660
♠
♠︎
♠️
2663
♣
♣︎
♣️
2665
♥
♥︎
♥️
2666
♦
♦︎
♦️
2668
♨
♨︎
♨️
267B
♻
♻︎
♻️
267E
♾
♾︎
♾️
267F
♿
♿︎
♿️
2692
⚒
⚒︎
⚒️
2693
⚓
⚓︎
⚓️
2694
⚔
⚔︎
⚔️
2695
⚕
⚕︎
⚕️
2696
⚖
⚖︎
⚖️
2697
⚗
⚗︎
⚗️
2699
⚙
⚙︎
⚙️
269B
⚛
⚛︎
⚛️
269C
⚜
⚜︎
⚜️
26A0
⚠
⚠︎
⚠️
26A1
⚡
⚡︎
⚡️
26A7
⚧
⚧︎
⚧️
26AA
⚪
⚪︎
⚪️
26AB
⚫
⚫︎
⚫️
26B0
⚰
⚰︎
⚰️
26B1
⚱
⚱︎
⚱️
26BD
⚽
⚽︎
⚽️
26BE
⚾
⚾︎
⚾️
26C4
⛄
⛄︎
⛄️
26C5
⛅
⛅︎
⛅️
26C8
⛈
⛈︎
⛈️
26CE
⛎
⛎︎
⛎️
26CF
⛏
⛏︎
⛏️
26D1
⛑
⛑︎
⛑️
26D3
⛓
⛓︎
⛓️
26D4
⛔
⛔︎
⛔️
26E9
⛩
⛩︎
⛩️
26EA
⛪
⛪︎
⛪️
26F0
⛰
⛰︎
⛰️
26F1
⛱
⛱︎
⛱️
26F2
⛲
⛲︎
⛲️
26F3
⛳
⛳︎
⛳️
26F4
⛴
⛴︎
⛴️
26F5
⛵
⛵︎
⛵️
26F7
⛷
⛷︎
⛷️
26F8
⛸
⛸︎
⛸️
26F9
⛹
⛹︎
⛹️
26FA
⛺
⛺︎
⛺️
26FD
⛽
⛽︎
⛽️
2702
✂
✂︎
✂️
2705
✅
✅︎
✅️
2708
✈
✈︎
✈️
2709
✉
✉︎
✉️
270A
✊
✊︎
✊️
270B
✋
✋︎
✋️
270C
✌
✌︎
✌️
270D
✍
✍︎
✍️
270F
✏
✏︎
✏️
2712
✒
✒︎
✒️
2714
✔
✔︎
✔️
2716
✖
✖︎
✖️
271D
✝
✝︎
✝️
2721
✡
✡︎
✡️
2728
✨
✨︎
✨️
2733
✳
✳︎
✳️
2734
✴
✴︎
✴️
2744
❄
❄︎
❄️
2747
❇
❇︎
❇️
274C
❌
❌︎
❌️
274E
❎
❎︎
❎️
2753
❓
❓︎
❓️
2754
❔
❔︎
❔️
2755
❕
❕︎
❕️
2757
❗
❗︎
❗️
2763
❣
❣︎
❣️
2764
❤
❤︎
❤️
2795
➕
➕︎
➕️
2796
➖
➖︎
➖️
2797
➗
➗︎
➗️
27A1
➡
➡︎
➡️
27B0
➰
➰︎
➰️
27BF
➿
➿︎
➿️
2934
⤴
⤴︎
⤴️
2935
⤵
⤵︎
⤵️
2B05
⬅
⬅︎
⬅️
2B06
⬆
⬆︎
⬆️
2B07
⬇
⬇︎
⬇️
2B1B
⬛
⬛︎
⬛️
2B1C
⬜
⬜︎
⬜️
2B50
⭐
⭐︎
⭐️
2B55
⭕
⭕︎
⭕️
3030
〰
〰︎
〰️
303D
〽
〽︎
〽️
3297
㊗
㊗︎
㊗️
3299
㊙
㊙︎
㊙️
1F004
🀄
🀄︎
🀄️
1F170
🅰
🅰︎
🅰️
1F171
🅱
🅱︎
🅱️
1F17E
🅾
🅾︎
🅾️
1F17F
🅿
🅿︎
🅿️
1F202
🈂
🈂︎
🈂️
1F21A
🈚
🈚︎
🈚️
1F22F
🈯
🈯︎
🈯️
1F237
🈷
🈷︎
🈷️
1F30D
🌍
🌍︎
🌍️
1F30E
🌎
🌎︎
🌎️
1F30F
🌏
🌏︎
🌏️
1F315
🌕
🌕︎
🌕️
1F31C
🌜
🌜︎
🌜️
1F321
🌡
🌡︎
🌡️
1F324
🌤
🌤︎
🌤️
1F325
🌥
🌥︎
🌥️
1F326
🌦
🌦︎
🌦️
1F327
🌧
🌧︎
🌧️
1F328
🌨
🌨︎
🌨️
1F329
🌩
🌩︎
🌩️
1F32A
🌪
🌪︎
🌪️
1F32B
🌫
🌫︎
🌫️
1F32C
🌬
🌬︎
🌬️
1F336
🌶
🌶︎
🌶️
1F378
🍸
🍸︎
🍸️
1F37D
🍽
🍽︎
🍽️
1F393
🎓
🎓︎
🎓️
1F396
🎖
🎖︎
🎖️
1F397
🎗
🎗︎
🎗️
1F399
🎙
🎙︎
🎙️
1F39A
🎚
🎚︎
🎚️
1F39B
🎛
🎛︎
🎛️
1F39E
🎞
🎞︎
🎞️
1F39F
🎟
🎟︎
🎟️
1F3A7
🎧
🎧︎
🎧️
1F3AC
🎬
🎬︎
🎬️
1F3AD
🎭
🎭︎
🎭️
1F3AE
🎮
🎮︎
🎮️
1F3C2
🏂
🏂︎
🏂️
1F3C4
🏄
🏄︎
🏄️
1F3C6
🏆
🏆︎
🏆️
1F3CA
🏊
🏊︎
🏊️
1F3CB
🏋
🏋︎
🏋️
1F3CC
🏌
🏌︎
🏌️
1F3CD
🏍
🏍︎
🏍️
1F3CE
🏎
🏎︎
🏎️
1F3D4
🏔
🏔︎
🏔️
1F3D5
🏕
🏕︎
🏕️
1F3D6
🏖
🏖︎
🏖️
1F3D7
🏗
🏗︎
🏗️
1F3D8
🏘
🏘︎
🏘️
1F3D9
🏙
🏙︎
🏙️
1F3DA
🏚
🏚︎
🏚️
1F3DB
🏛
🏛︎
🏛️
1F3DC
🏜
🏜︎
🏜️
1F3DD
🏝
🏝︎
🏝️
1F3DE
🏞
🏞︎
🏞️
1F3DF
🏟
🏟︎
🏟️
1F3E0
🏠
🏠︎
🏠️
1F3ED
🏭
🏭︎
🏭️
1F3F3
🏳
🏳︎
🏳️
1F3F5
🏵
🏵︎
🏵️
1F3F7
🏷
🏷︎
🏷️
1F408
🐈
🐈︎
🐈️
1F415
🐕
🐕︎
🐕️
1F41F
🐟
🐟︎
🐟️
1F426
🐦
🐦︎
🐦️
1F43F
🐿
🐿︎
🐿️
1F441
👁
👁︎
👁️
1F442
👂
👂︎
👂️
1F446
👆
👆︎
👆️
1F447
👇
👇︎
👇️
1F448
👈
👈︎
👈️
1F449
👉
👉︎
👉️
1F44D
👍
👍︎
👍️
1F44E
👎
👎︎
👎️
1F453
👓
👓︎
👓️
1F46A
👪
👪︎
👪️
1F47D
👽
👽︎
👽️
1F4A3
💣
💣︎
💣️
1F4B0
💰
💰︎
💰️
1F4B3
💳
💳︎
💳️
1F4BB
💻
💻︎
💻️
1F4BF
💿
💿︎
💿️
1F4CB
📋
📋︎
📋️
1F4DA
📚
📚︎
📚️
1F4DF
📟
📟︎
📟️
1F4E4
📤
📤︎
📤️
1F4E5
📥
📥︎
📥️
1F4E6
📦
📦︎
📦️
1F4EA
📪
📪︎
📪️
1F4EB
📫
📫︎
📫️
1F4EC
📬
📬︎
📬️
1F4ED
📭
📭︎
📭️
1F4F7
📷
📷︎
📷️
1F4F9
📹
📹︎
📹️
1F4FA
📺
📺︎
📺️
1F4FB
📻
📻︎
📻️
1F4FD
📽
📽︎
📽️
1F508
🔈
🔈︎
🔈️
1F50D
🔍
🔍︎
🔍️
1F512
🔒
🔒︎
🔒️
1F513
🔓
🔓︎
🔓️
1F549
🕉
🕉︎
🕉️
1F54A
🕊
🕊︎
🕊️
1F550
🕐
🕐︎
🕐️
1F551
🕑
🕑︎
🕑️
1F552
🕒
🕒︎
🕒️
1F553
🕓
🕓︎
🕓️
1F554
🕔
🕔︎
🕔️
1F555
🕕
🕕︎
🕕️
1F556
🕖
🕖︎
🕖️
1F557
🕗
🕗︎
🕗️
1F558
🕘
🕘︎
🕘️
1F559
🕙
🕙︎
🕙️
1F55A
🕚
🕚︎
🕚️
1F55B
🕛
🕛︎
🕛️
1F55C
🕜
🕜︎
🕜️
1F55D
🕝
🕝︎
🕝️
1F55E
🕞
🕞︎
🕞️
1F55F
🕟
🕟︎
🕟️
1F560
🕠
🕠︎
🕠️
1F561
🕡
🕡︎
🕡️
1F562
🕢
🕢︎
🕢️
1F563
🕣
🕣︎
🕣️
1F564
🕤
🕤︎
🕤️
1F565
🕥
🕥︎
🕥️
1F566
🕦
🕦︎
🕦️
1F567
🕧
🕧︎
🕧️
1F56F
🕯
🕯︎
🕯️
1F570
🕰
🕰︎
🕰️
1F573
🕳
🕳︎
🕳️
1F574
🕴
🕴︎
🕴️
1F575
🕵
🕵︎
🕵️
1F576
🕶
🕶︎
🕶️
1F577
🕷
🕷︎
🕷️
1F578
🕸
🕸︎
🕸️
1F579
🕹
🕹︎
🕹️
1F587
🖇
🖇︎
🖇️
1F58A
🖊
🖊︎
🖊️
1F58B
🖋
🖋︎
🖋️
1F58C
🖌
🖌︎
🖌️
1F58D
🖍
🖍︎
🖍️
1F590
🖐
🖐︎
🖐️
1F5A5
🖥
🖥︎
🖥️
1F5A8
🖨
🖨︎
🖨️
1F5B1
🖱
🖱︎
🖱️
1F5B2
🖲
🖲︎
🖲️
1F5BC
🖼
🖼︎
🖼️
1F5C2
🗂
🗂︎
🗂️
1F5C3
🗃
🗃︎
🗃️
1F5C4
🗄
🗄︎
🗄️
1F5D1
🗑
🗑︎
🗑️
1F5D2
🗒
🗒︎
🗒️
1F5D3
🗓
🗓︎
🗓️
1F5DC
🗜
🗜︎
🗜️
1F5DD
🗝
🗝︎
🗝️
1F5DE
🗞
🗞︎
🗞️
1F5E1
🗡
🗡︎
🗡️
1F5E3
🗣
🗣︎
🗣️
1F5E8
🗨
🗨︎
🗨️
1F5EF
🗯
🗯︎
🗯️
1F5F3
🗳
🗳︎
🗳️
1F5FA
🗺
🗺︎
🗺️
1F610
😐
😐︎
😐️
1F687
🚇
🚇︎
🚇️
1F68D
🚍
🚍︎
🚍️
1F691
🚑
🚑︎
🚑️
1F694
🚔
🚔︎
🚔️
1F698
🚘
🚘︎
🚘️
1F6AD
🚭
🚭︎
🚭️
1F6B2
🚲
🚲︎
🚲️
1F6B9
🚹
🚹︎
🚹️
1F6BA
🚺
🚺︎
🚺️
1F6BC
🚼
🚼︎
🚼️
1F6CB
🛋
🛋︎
🛋️
1F6CD
🛍
🛍︎
🛍️
1F6CE
🛎
🛎︎
🛎️
1F6CF
🛏
🛏︎
🛏️
1F6E0
🛠
🛠︎
🛠️
1F6E1
🛡
🛡︎
🛡️
1F6E2
🛢
🛢︎
🛢️
1F6E3
🛣
🛣︎
🛣️
1F6E4
🛤
🛤︎
🛤️
1F6E5
🛥
🛥︎
🛥️
1F6E9
🛩
🛩︎
🛩️
1F6F0
🛰
🛰︎
🛰️
1F6F3
🛳
🛳︎
🛳️
普通字符应该显示为黑白的,但你看到的可能是彩色的Emoji。如前文所述,你的环境可能会影响字符显示样式。