专栏首页IMWeb前端团队人人都是艺术家!谈谈那些奇怪的字符(上)

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

前言

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

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

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

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

提起泰文,很多朋友都会立即想到:萨瓦迪卡(你好)。 但这句话是怎么写的呢?

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

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

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

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

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

二、人与机器的矛盾

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

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

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

三、萌即正义的颜文字

也许你觉得泰文奇葩,但它的声调就在文字里,看到就能准确地读出来。这样更容易传播,是不是也没了你读文言文要查字典的烦恼呢?所以文字的设计各有优劣。

这样的设计不止泰文,它只是一个典型的例子。除此之外常见的还有老挝文、藏文。 脑洞大开的艺术家们,又会想到另外一个好玩的事情:我能不能拿老挝文的“帽子”,组合“藏文”的鞋子,合成一个独立的字符呢?

他们赢了。不久,颜文字开始流行。

四、字体的错位

前面我们一直在谈字符的本质,但字符在屏幕中的展示,还有一个关键的因素:字体。 相同的字符,使用了不同的字体,它们的显示也会有差别。

一行中文,你设置“黑体”或“草书”,它大体来看还是规整的; 但如果你设置一行英文为“草书”,可能就会有问题。

在浏览器里,如果对应编码在字体文件里为空,一般会展示成一个方格,起码不会影响其他正常字符的排版。但我们知道,Unicode的林子实在太大了… 在某些字体里,就会对一些特殊的字符产生错误的排版。

那么,这两种展示哪种才是正常的呢?其实都不正常。 我们查看西里尔文计数法的wiki,可以看到它只有配合西里尔数字时,才能展示正常:

至于你把它跟其他语言组合在一起时,我们要么看到错位,要么看到分离的展示。而且国际上并没有一个组织,去规定要怎么展示。事实上文字这么多,根本也管不过来,所以这也是混乱的原因。

最后补充一点,另外一小撮别有心裁的艺术家,还习惯使用这个字符去突破敏感词过滤…

五、混乱与创新?

值得一提的是,Unicode是不可阻挡的潮流,它也一直在更新。比如我们常用的Emoji表情,就已经是Unicode的标准字符集。

而前面我们说到,大家在玩这些奇奇怪怪的字符时,都是基于“类似bug”的设定在搞事情。这就有很大的局限性。 那“艺术家”们又会有些大胆的想法:我能不能主动创造一些新字符,就是为了错位和组合呢?

我也不清楚这是创新,还是会带来更多的混乱。但事实是,iOS系统自带的字符,已经有这样的尝试了。并且搜狗输入法在iOS系统提供的诸多符号里,挑选了一些,可供用户去使用。这个功能的名字,叫做花漾字。

还是得感慨艺术家们的视角是多么独特。 既然都这样了…最后,希望我们的国产表情包能有朝一日打入Unicode吧。

(未完待续)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    编码,是每个程序员绕不开的话题。对于前端工程师而言,字符更是会直观地展示在界面上。 提起文字,大部分人的脑中,都会定式为规整排列的字符。但是林子大了什么鸟都有,...

    IMWeb前端团队
  • webpack 项目 css/js主域重试

    为了提高网站的访问速度,现在一般会将静态资源放在 CDN 下,而不是放在网站的域名之下。以腾讯课堂为例,其域名为 ke.qq.com,打开控制台,访问 ke.q...

    IMWeb前端团队
  • webpack 项目 css/js主域重试

    为了提高网站的访问速度,现在一般会将静态资源放在 CDN 下,而不是放在网站的域名之下。以腾讯课堂为例,其域名为 ke.qq.com,打开控制台,访问 ke....

    IMWeb前端团队
  • 揭秘前端字符的戏精之路

    作者:IMWeb 黎腾 来源:IMWeb社区 前言 编码,是每个程序员绕不开的话题。对于前端工程师而言,字符更是会直观地展示在界面上。 提起文字,大部分人的脑...

    CSDN技术头条
  • LuaJit转义的问题

    之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对...

    meteoric
  • 人人都是艺术家!谈谈那些奇怪的字符

    腾讯NEXT学位
  • 人人都是艺术家!谈谈那些奇怪的字符(上)

    编码,是每个程序员绕不开的话题。对于前端工程师而言,字符更是会直观地展示在界面上。 提起文字,大部分人的脑中,都会定式为规整排列的字符。但是林子大了什么鸟都有,...

    IMWeb前端团队
  • 贝叶斯分类器及Python实现

    贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本文由本人学习贝叶斯分类器过程中的笔记,再加上使用Python进行文本分类实战...

    YingJoy_
  • Ubuntu16.04常用命令手记

    本文采用CC BY-NC-SA 3.0 Unported协议进行许可,转载请保留此文章链接

    Debug客栈
  • web前端架构 - 写在前面的话

    写在前面的话: 因为是我自己亲身参与的项目,所以代码啊,架构啊,应该不会很高大上,反而会很土,很从底开始,一点点的加深对web前端架构的认识。 而且很有...

    web前端教室

扫码关注云+社区

领取腾讯云代金券