专栏名称: qize
前端交互开发工程师
目录
相关文章推荐
51好读  ›  专栏  ›  qize

人人都是艺术家!谈谈那些奇怪的字符(上)

qize  · 掘金  · 前端  · 2018-01-15 05:44

正文

本文作者:IMWeb 黎腾 原文出处: IMWeb社区 未经同意,禁止转载

前言

编码,是每个程序员绕不开的话题。对于前端工程师而言,字符更是会直观地展示在界面上。
提起文字,大部分人的脑中,都会定式为规整排列的字符。但是林子大了什么鸟都有,世界上可是存在着6800+种文字,难免会飞出来一些诡异的鸟…
而号称“万国码”的Unicode,在实现编码与展示的时候,也会不会遇到一些奇葩的事情呢?

事实上,可能你早已见识过了:




x̙͈̝͍͕̙̄͛̽̆͌́̕͟g̘̣̠̝̟̤̥̼̼̽͑͋̈̑̒͟͞q̛̤̦̝̘͎͋̔̋͌͒̆̋̚͡f̵̢̙͇̮̠̋̀͌̅̉̃̔͜͜͠͡r̢̜̩͙̭̲͓͈̈̀͑̆͋̚͢͜m̷̛͙̝̣̲̭͍͉̊̓̾̈̋̿̚͢͟͠s̷̡̩͔̮͈̜̊̽͂̆̈́̃̓͋̏


热҈的҈字҈都҈出҈汗҈了҈

你的屏幕被蓝翔挖掘机给挖坏了不信你看;̷̸̨̀͒̏̃ͦ̈́̾̀́̎͢҉̵̶͚̼͉͖̺̥͔͇̰̹̮͙͉̻̼̭̻͕̮͇ͨͬͪ͗̇̑̽͋̀̋̊͌ͧͨͭ̓̅͐ͥ̂̔̊ͧ͊҉̶̵̷̞̩̦̳̺̳̬̬̩̣̫͇̯̥͖͍͕̠̦̼̗ͯ̽͌̔ͪͯ́́͋̍ͨ̿̿̎͒ͤ̓̅̀͂ͧ͋̏ͫͣ̔͘͜͠͏̶̵̸̧̧̥̺͓̘̺͎̜̥͕͈̝̫͎̺̮̱̤̠̠͖̳̻̥̣̪͍͕͇̮͙̹̪ͮͧͫ͂͒ͤͣ̌̽ͨͪ͒̄̄̉̒̊ͩ̅͆͘̚͘͘̚͟͟͝ͅ




今天我们就来探讨一下这些奇怪的字符。


一、文字可以戴帽子和穿鞋子

提起泰文,很多朋友都会立即想到: 萨瓦迪卡(你好)
但这句话是怎么写的呢?
其实这句你好,男生和女生之间还有差异,男生写法是: สวัสดีครับ ,女生则是: สวัสดีค่ะ

不过这并不重要,重要的是,我们发现某些字的上面,还带了特殊的符号。就好像是戴上了帽子。
事实上,泰文字符不仅会“戴帽子”,偶尔还会“穿鞋子”。
比如下面三个字符: ผ ผู ผู้

如果脑洞再大一点,有人就会想,那是不是还可以戴多顶帽子呢?
的确如此…泰文允许你穿一双鞋子,并且戴两顶帽子。完整的形式是这样的:

所以,平时看惯了中英文的我们,需要改变一下思路了。
世界上的文字,并不全是规规整整横向排列的格子,也存在像泰文这种变形金刚 组合式 的文字。

虽然标准的泰文里,“帽子”和“鞋子”的数量是有限制的,但由于国际码的迷之设计(先卖个关子),在计算机里显示的泰文字符,却可以拥有无数的帽子和鞋子。也就是说,它变成了一款可以在Y轴无限拓展的文字!

并且,咱不光可以往上喷,还可以有一定角度…

还可以 ,简直是不讲道理。

(由于一些系统会崩溃,这里使用截图)

二、人与机器的矛盾

然后我们会质问Unicode,你为何不讲道理?
如此的设计,近乎是一个bug;但即使是bug,也应该早就修复了呀。

事实上,这样的设计,是为了解决一个问题:人与机器的矛盾。

首先是存储的矛盾。
如果把每个组合好的泰文用一个编码来表示,那么至少需要 44×21×4=3696 个编码(实际上可能要比这还多)。用如此多的编码来处理基本元素只有 69 个的文字是非常浪费的,因此电脑采用一套称为复杂文字编排(CTL)的设计来解决矛盾。
简单的说,泰文的每个基本字符对应一个编码,用户在输入法里依次输入多个基本字符进行拼合,最后敲一个特殊的“ 结束字符 ”;这时前面输入的基本字符,就拼合成了一个 单独 的泰文字符,在屏幕中显示。 这样就解决了存储的空间浪费问题。

但这样就带来了第二个矛盾,识别的问题。
人可以轻松地识别一个泰文合字是否拼写正确、有意义;但机器在显示时却很难进行判断,即使可以也会带来相应的性能问题。
如何解决呢?如今会在输入法上做一些文章,比如打一个声调符号后就不能再输入了。不过,由于泰文这种基于结束标志合成字符的本质,你还是没法避免“艺术家”们使用复制粘贴、手工撰改字符位置等方式去进行创造,只能起到一些限制作用。

其次,在比较新版本的Webkit里,在显示上会阻止这种往上下冒的字符,这样至少不影响排版。所以有部分字符已经不会出现上下叠加的情形了,你可以在不同浏览器,观察一下这个字符的显示:ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็







请到「今天看啥」查看全文