聊聊 Unicode 中的组合字符(Combining Character)

2019-09-03 by Dron

它是什么?

在字体排印学中,组合字符(Combining Character)是用来改变其它字符所用的字符,这些字符可以添加到目标字符周围或覆盖目标字符,例如汉语拼音字母「ü」上面的两个小点,或「á」、「à」字母上面的音标。

组合字符通常的用法为:将组合字符 置于需要修饰的目标字符后边,使目标字符被渲染(或打印)成相应结果。

组合字符在 Unicode 统一码中存在多个区块,编码范围主要有:

尽管组合字符的作用在 HTML 面前显得黯然失色,它在各种纯文本环境下还是很有用的,比如可以在朋友圈上或者聊天窗口中发送包括组合字符的消息以彰显你的个性。

组合字符举例

由于 Chrome 浏览器对「作用于中文上的组合字符」支持不好,以下示例请换用 Safari 浏览器查看

目前我也没有太好办法解决 Chrome 下的渲染问题,如果你有什么好的办法,希望你告诉我。

拼音音标

āáăà

注意,以上音标是在每个字母 a 右边分别增加组合字符,它们分别是:U+0304‌U+0301U+0306U+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 零宽空白字符的文章《“短”化你的代码》,如果你也有其它好玩的点子,可以评论中与我交流。

参考资料