聊聊 Unicode 中的组合字符(Combining Character)
2019-09-03 by Dron
它是什么?
在字体排印学中,组合字符(Combining Character)是用来改变其它字符所用的字符,这些字符可以添加到目标字符周围或覆盖目标字符,例如汉语拼音字母「ü」上面的两个小点,或「á」、「à」字母上面的音标。
组合字符通常的用法为:将组合字符 置于需要修饰的目标字符后边,使目标字符被渲染(或打印)成相应结果。
组合字符在 Unicode 统一码中存在多个区块,编码范围主要有:
- 组合用附加符号(Combining Diacritical Marks):区间从
U+0300
到U+036F
共 80 字。 - 组合用附加符号补集(Combining Diacritical Marks Supplement):区间从
U+1DC0
到U+1DFF
共 64 字。 - 组合用记号(Combining Diacritical Marks for Symbols):区间从
U+20D0
到U+20FF
共 48 字。 - 组合用半形符号(Combining Half Marks):区间从
U+FE20
到U+FE2F
共 16 字。
尽管组合字符的作用在 HTML 面前显得黯然失色,它在各种纯文本环境下还是很有用的,比如可以在朋友圈上或者聊天窗口中发送包括组合字符的消息以彰显你的个性。
组合字符举例
由于 Chrome 浏览器对「作用于中文上的组合字符」支持不好,以下示例请换用 Safari 浏览器查看。
目前我也没有太好办法解决 Chrome 下的渲染问题,如果你有什么好的办法,希望你告诉我。
拼音音标
āáăà
注意,以上音标是在每个字母 a
右边分别增加组合字符,它们分别是:U+0304
、U+0301
、U+0306
和 U+0300
,下同。
'āáăà'.length === 8; // true
'ā'.length === 2; // true
当然,Unicode 中也提供带音标的拉丁文(单字节),这样就不必使用组合字符来标记音调了,在统一码 拉丁文补充1、拉丁文扩展A 及 拉丁文扩展B 中可以找到它们。
划线和点划线
这̅句̅话̅加̅了̅上̅横̅线̅ U+0305
这̲句̲话̲加̲了̲下̲横̲线̲ U+0332
这̿句̿话̿加̿了̿双̿上̿横̿线̿ U+033F
这̳句̳话̳加̳了̳双̳下̳横̳线̳ U+0333
这⃨句⃨话⃨加⃨了⃨三⃨点⃨下⃨划⃨线⃨ U+20E8
打叉和星星
这̽句̽话̽加̽了̽上̽叉̽ U+033D
这͓句͓话͓加͓了͓下͓叉͓ U+0353
这⃰句⃰话⃰加⃰了⃰上⃰星⃰号⃰ U+20F0
这͙句͙话͙加͙了͙下͙星͙号͙ U+0359
特殊
这͚句͚话͚加͚了͚下͚双͚圆͚圈͚ U+035A
之͛字͛型͛ U+035B
加圈或加框
爱的魔力转⃝圈⃝圈⃝ U+20DD
不要试图用那些条⃞条⃞框⃞框⃞来约束我 U+20DE
题外话
Unicode 中还有挺多其它好玩的东西,比如我之前发过的一篇关于 Unicode 零宽空白字符的文章《“短”化你的代码》,如果你也有其它好玩的点子,可以评论中与我交流。