看下面短短一行代码
<meta charset="UTF-8" />
大家有没有思考过,charset为什么要设置为UTF-8呢?这个UTF-8究竟是何方神圣呢?还可以设置为什么呢?如果不设置默认值是什么呢?一句话就是,大家又没人对自己常见的东西进行头脑风暴呢?如果你是为了使用而使用的话,对不起,这篇文章可能不太适合你,如果你是一个对知识深挖的人,请继续往下观看
1. 英语摘要
本来想着让大家自己查翻译的,但是想了想既然大家有兴趣深入了解,我也要给大家一个好的阅读体验,所以翻译都给大家准备了,毕竟不是每个人英语都是大牛,像我英语就很菜鸡,只能自己查翻译才知道啥意思,真是惭愧啊。好了,废话不多说,整活
character 字符
character set 字符集
charset 字符集
一开始我把character set自己理解为字符设置,后来查了查才发现是字符集的意思,真是佩服自己。本以为charset是character set的缩写或者是某种写法,结果人家就是一个单词表示字符集的意思,真是MMP了。
2. 字符集
如果你看了英语摘要你应该知道charset是字符集,后面的值可能就是某个字符集的啦,那究竟字符集是什么呢?有哪些字符集呢?有啥区别呢?为什么很多都是使用UTF-8不用其他的呢?
导读
要说字符集,就有说到计算机的起源,计算机是美国佬发明的,用于计算的机器,那么在美国本土,都是使用26个字母+数字+特殊字符,说到底呢,这么多就已经够用了,总共加起来还不到128个,然后他们用0,1,2,3....127把这些这些字符一对一映射出来,这样就得到了字符对应的码点,然后把码点翻译成二进制,存储在计算机即可。还有一个小问题就是,在计算机硬件中,最小的单位都是一个字节,也就是8位,如果不够的话就要补0。说了这么多,可能有些人还是不理解,看看下面这张图就一目了然了。
请允许我总结一下美国佬字符集的特点:一个字节,不够用0补
这就是美国人使用的字符集,也叫他ASCII,没啥了,就这么一点,结果到了中国,水土不服了,因为我们有多汉字啊,两万多个啊,朋友,怎么表示呢?没办法表示,散了吧。那肯定不是啦,我们自己又搞了一套,叫GBK,虽然说自己搞了一套,但是还是要兼容人家美国佬的ASCII,毕竟是人家发明的,得尊重点。因为汉字多,一个字节根本表示不完啊,这个咋整呢?粗暴解法:一个字节不行就两个字节洛。所以GBK的特点是:汉字占用2个字节,兼容ASCII(一个字节),通俗点就是中文用两个字节,兼容美国佬字符集,还有一个问题就是解码的时候怎么知道他是中文还是美国佬字符呢?好问题,这位同学有自己的思考,其实很简单,看上面这个图美国佬的都是0开头的,我们搞个1开头的就行啦,简单。总是有些人说不懂,为了大家能理解,我上一张图大家就能明白了
我a你 GBK表示
看到这里,你肯定已经理解GBK,请容许我最后归纳一下GBK的特点:中文用两个字节表示并且二进制以1开头,兼容美国佬字符集
那么就这样结束了吗?当然不是,好戏才刚刚开始,美国人用就弄了个美国佬字符集,中国人用就弄了个中国字符集,世界上这么过国家用,岂不是每个国家都弄一个字符集?那当然啦,岛国用就要有岛国电影,呸,是岛国字符集。这个时候大哥大(一个忘记了名字的组织)就不乐意了啊,他就要统一使用一种字符集,里面有所有国家的语言文字,真正的有容乃大,这个字符集我叫他叫有容乃大字符集,很多人也叫他UTF-32。4个字节可以表示2的32次方个字符,当然是够用,但是人家美国人明明可以用1个字节表示,你硬要人家用4个字节,中文明明2个字节能搞定,硬是要用4个字节,大家肯定不乐意啊,所以没用,浪费内存,浪费带宽。弱弱总结一下有容乃大字符集: 4个字节表示世界所有字符,浪费严重,没人用。没人用这可就难为了大哥大了,所以后面又推出了优化版的有容奶大字符集,一般叫他UTF-8,由于他非常好,所以他非常好,导致他很岛国电影在用,呸~,是很多国家在用。
UTF-8隆重登场
这个家伙就要给大家好好说说了,非常重要的嘞!
UTF-8:Unicode字符集中的一种编码方案,采取可变长编码方案,共分四个长度区:1字节,2字节,3字节,4字节,没了。
特别注意:作为中国人的我,只是研究了中文和英文,其他什么岛国的我没有特别关注,需要了解的自行查阅
- 兼容ASCII,毕竟是老大哥,需要尊重
- 中文用了3个字节(这个和GBK不同了,自己记一下)
说什么可变长,兼容ASCII,中文3个字节啊,大家肯定也是一头雾水,上图说例子最实际,看下图,秒懂
a我m从编码到解码
这里有小伙伴可能有个疑问:为什么“我”用第三种方式呢?其他中文会不会出现在第二种方式或者第四种方式呢?对于这个问题,人家设计的时候早就考虑到了,中文肯定都是采用的第三种方式,不会出现在第二或者第四种方式,不用担心。说UTF-8重点并不是因为理解有多难,而是对于技术开发人员来说,我们都应该使用UTF-8编码格式进行开发,理由有两个:1. 世界通过 2. 都在使用 ,假设你用GBK的话,开源项目贡献者来自世界各地,人家没法参与进来,所以我们的的规范一定要限制编码格式为UTF-8,限制编码格式为UTF-8,限制编码格式为UTF-8
归纳
ASCII: 占一个字节,表示数字、英文相关字符
GBK:中文占两个字节,兼容ASCII
UTF-32: 占4个字节
UTF-8: 可变长度,4种规范,推荐使用
注意点: 基本上所有的都兼容ASCII,毕竟人家是老大哥嘛
希望
这就是我了解到有关于字符集的皮毛知识,创作不易,希望各位看官点赞,关注和收藏哦!
下课啦,拜拜~