浅谈字符编码

ASCII 占1个字节,只支持英文

GB2312 占两个字节,支持6700+汉字

GBK GB2312的升级版,支持21000+汉字

Shift-JIS 日本字符

ks_c_5601-1987韩国编码

TIS-620泰国编码

由于每个国家都有自己的字符,所以其对应关系也涵盖了自己国家的字符,但是以上编码都存在局限性,即:仅涵盖本国字符,无其他国家字符的对应关系,应运而生出现万国码,它涵盖了全球所有的文字和二进制的对应关系。

Unicode 2-4字节,已经收录136690个字符,还在一直不断扩张中...

Unicode 起到了两个作用

1.直接支持全球所有语言,每个国家都可以不用再使用自己之前的编码了,用Unicode就可以了(就跟英语是全球统一语言一样)

2.Unicode包含了跟全球所有国家编码的映射关系

Unicode解决了字符和二进制的对应关系,但是使用Unicode表示一个字符,太浪费空间。例如,理应unicode表示“python”需要12个字节才能表示,比原来ASCII表示增加了1倍。

由于计算机的内存比较大,而且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!

为了解决存储和网络传输问题,出现了Unicode Transformation Format,学术名UTF,即对Unicode中的进行转换,以便于在存储和网络传输时可以节省空间

    UTF-8:使用1.2.3.4个字节表示所有字符,优先使用1个字符,无法满足则增加一个字节,最多4个字节,英文占1个字节,欧洲语系占2个,东亚占3个

    UTF-16:使用2.4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示

    UTF-32:使用四个字节表示所有字符;

总结 UTF是为Unicode编码设计的一种在存储 和传输时节省空间的编码方案

   无论以什么编码在内存里显示字符,存到硬盘上都是2进制

要注意的是,存到硬盘上是以何种编码存的,再从硬盘上读出来时,就必须以何种编码读,要不就乱了

编码的转换

虽然国际语言是英语,但大家在自己的国家依然说自己的语言,不过出了国,你得会英语

编码也一样,虽然有了 Unicode and UTF-8,但是由于历史问题,每个国家依然在大量使用自己的编码,比如中国的windows,默认编码依然是GBK 而不是UTF-8

基于此,如果中国的软件出口到美国,在美国人的电脑上就会显示乱码,因为他们没有GBK编码,若是想要中国的软件可以正常的在 美国人的电脑上显示,只有一下两个路可走

    1.让美国人的电脑上都装上gbk编码

    2.把你的软件编码以UTF-8 编码

第一种方法几乎不可能实现,第二种方法比较简单,但是也只能是针对新开发的软件,如果你之前开发的软件就是以gbk编码的,上百万行的代码可能已经写出去了,新编码成UTF-8格式也会费很大力气。

所以,针对已经用gbk开发完毕的项目,以上两种方案都不能轻松的让项目在美国人电脑上正常显示,难道没有别的办法了吗?

有!,还记得我们unicode其中一个功能是其包含了跟全球所有国家编码的映射关系,意思就是,你写的gbl的“啊哈”,但是在unicode能自动知道它在unicode的“啊哈”的编码是什么,如果这样的话,那是不是意味着,无论你以什么编码存储数据,只要你的软件在把数据从硬盘读到内存里,转成unicode来显示,就可以了

由于所有的系统,编程语言都默认支持unicode,那你的gbk软件放到美国电脑上,加载到内存里编程unicode,中文就可以正常显示了

作者:sdasdasds

链接:https://www.jianshu.com/p/c715763494f8

來源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(浅谈字符编码)