首先先来捋一捋计算机编码发展史吧。
1.一开始,计算机中只有1和0,大家谁也看不懂,美帝为了方便,先是制定了ASCII编码,一共128位,包含了英文字符和一些符号,比如!@#$,每个都是一个字节长度
2.问题出来了,也不是哪国都说英文啊,而且要表示中文怎么办?所以各国有各国的方案,欧洲那边为了表示法语、德语,搞了一套ISO,也是每个字符一个字节
3.这下轮到中国了,咱们汉字有几万个,常用的就有几千,一个汉字就得用两个字节表示,这个时候GBK就发明了
一些大佬看不下去了,各国这么独立发展,以后咋交流,所以Unicode编码就出现了。这套编码表的编号从0一直算到了100多万。每一个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突,于是天下大定!但是,Unicode把大家都归纳进来,却没有为编码的二进制传输和二进制解码做出规定。
那留下问题总要解决,就出现了UTF-32、 UTF-16、 UTF-8.(这里指Unicode的第二个版本)
UTF-32就是把所有字符都用32位也就是4个字节来表示,
UTF-16只能是选两个字节或四个字节,
UTF-8可以选择1到6个字节中的任一个来表示。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。使用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器所以我们看到很多网页的源码上会有类似的信息,表示该网页正是用的UTF-8编码。
总结下来就是:计算机内存中,统一使用Unicode编码,需要保存或者传输时,转换成UTF8编码。
参考:
计算机中为何不直接使用 UTF-8 编码进行存储而要使用 Unicode 再转换成 UTF-8?
Unicode和UTF-8、UTF-16、UTF-32之间的关系
utf-8和Unicode的区别
网友评论