计算机供01高低电位表示信息,01也是最小逻辑单元。

一个字节由8个bit位表示,也就是一个字节最多能表示256个字符(256种组合)

ASCII码就是这种表示方法,但只用钱7位表达了128个字符,开头都是0,这128个字符包含常见的英文字母大小写,以及32个不能打印出来的控制符。

英文肯定是够用了,但有上万个字符的中文及其他语言就不行了。

所以GB2312编码来了,用两个字节表示一个汉字,也就是16个bit位,终于满足所有汉字了。

但每个语言都搞一套编码,不够国际化,别的编码方式的浏览器打开中文都是乱码。

所以Unicode出现了,uni + code (统一 + 编码)

终于能把全世界的语言字符表达完了。

但有个问题:浪费存储空间,很多排在后面的特殊字符要用4个甚至给更多字符表达,那就是32个bit位啊,如果只表达一个英文字母,8位就足够足够了,剩余的位置都要补0,空占位而已。

所以UTF-8 出现了。

UTF-8可以非常灵活根据不同字符,采用1-4个字符去表达,比如我们熟知的:英文1个字符,汉字两个字符,但要知道,有别的语言字符需要3-4个字符才能表达。

文字字符太单调了,不够生动形象,全球人类都能通过笑和哭的表情来表达信息,如果能有表情就好了,怎么办呢?

二次元的国都 —— 日本,率先发明了emoji,来解决这个问题,比如:😯😈😎😆☹️

e表示”絵”,moji表示”文字”。连在一起,就是”絵文字”,是不是很日文?

流行以后难免要统一起来,那就国际化吧:Unicode开始接纳emoji。所以,对计算机来说:

emoji就是字符,emoji就是字符,emoji就是字符。

现在emoji越来越多,都在这里http://www.unicode.org/emoji/charts/full-emoji-list.html

将来随着新名词的出现和老词汇的丰富,还会有更多emoji表情出现,所以我们正在经历电脑字符愈来愈多的年代。

为什么同样的笑脸emoji在不同的平台上长得稍微有些不一样呢?比如微信里的,和电脑里的,或其他语言平台安卓下的?

因为:Unicode只规定了Emoji在某个01组合位置的含义,并没有规定它的长相。所以假设1000101表示大笑,那不同的平台只要给出符合自己民情的笑脸样式即可。

话题跑远了,回到技术话题:当百度搜索你好时,看到的请求编码是这样的:

1
https://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD

很明显汉字【你好】被编码成了【%E4%BD%A0%E5%A5%BD】,且还有这多%%%。