81580495 2019-02-17
在写代码的时候,像接触到一些老项目,这些老项目一般都是gbk编码的,现在国际规范所有编码用utf8,好吧,这我理解,那么又来个unicode和ascii码是几个意思,顿时觉的作为程序员,这块要好好补一补,后来查阅相关资料才知道原来如此。
我们知道计算机是美国人发明的,计算机内部它只识别0、1这样的二进制,我们常说的1个字节就是8位二进制组成的,由00000000~11111111,最大256,也就是说一个字节可以有256种状态,于是美国人制定了一套英文与二进制之间的关系,就这样ascii码诞生了。每个英文字母和数字,加上其他一些特殊字符都有对应的一个ascii码,acsii码一共128个,8位二进制的首位默认都是0。如下图二进制01000001 对应字母A。
我们知道ascii码有一共128个字符,中国人急了,这怎么能行,我们常用的汉字几千个,更别提那些生僻字了,你这完全不够啊,于是我们中国人用两个字节来表示一个汉字,这样就有256*256=65536种组合,对于常用的汉字来说够用了,但是空间是ascii码的两倍了,这样中国的编码是解决了,韩国人不服,韩国字怎么办,韩国人搞了个EUC-KR编码,日本人不服,日本的字怎么办,于是日本人搞了个Shift_JIS编码,这样各个国家都有各个国家的编码。于是出现了一个问题,中国人用gbk编码写了一封邮件发给了日本人,日本人打开邮件,懵了,全是乱码,不认识。针对这种问题就出现了接下来要说的unicode编码
正如上面所说的,国家之间都有不同的编码,日本的朋友想打开中国朋友发的邮件,就必须先设置编辑器的编码为gbk,这样就很麻烦,于是想到要是有一种编码把世界上所有的语言都编进去,问题不就解决了,就这样unicode就产生了,可以想象unicode是一个多么庞大的编码集合。unicode编码有一个问题,那就是一般的汉字占2个字节,一些生僻的汉字可能要3个字节,其他语言可能都各不相同,像英文才1字节,如果统一全部用3字节来表示,那么英文的前两位二进制必然全是0,浪费了空间,如果能有一种实现方式帮助unicode来识别英文用1个字节,汉字用2个字节来存储,那就方便了,于是出现了接下来要说的utf8。
随着互联网的普及,统一编码越来越重要了,于是utf-8就是unicode的实现方式,uft-8解决了上述unicode说的字符长度的问题,识别哪个字符用多少长度就是utf-8干的事,像英文字符就是1个长度和ascii码一样,像汉字就用2个长度,生僻的用3个长度,utf8更像一种存储方式,编辑器打开代码,utf8转unicode,保存的时候unicode转utf8。
还有其他很多类型的编码,这里就不一一解释了,以上是比较常见的几种编码,欢迎交流