ASCII,ISO8859-1,GBK,GB18030,Unicode,UTF-8详解
ASCII,ISO8859-1,GBK,GB18030,Unicode,UTF-8详解
程序中经常遇到乱码的问题,产生的乱码的原因就是因为计算机直接存储字符,需要将字符转化为二进制的,不同的转化规则就对应了不同的编码方式,而保持不乱的条件就是编码方式和解码方式保持一致,今天就一起阅尽天下编码,心中自然无码。
首先先来看一眼编码的发展历程图:
ASCII:首先大家都知道计算机由美国人发明,那ASCII码正是最早用来将127字符的编码到计算机里面的一套编码;
ISO8859-1:ASCII的扩充,可以编码一些较为生僻的拉丁字符;
GB2312:当计算机来到中国,ISO8859-1显然就不够用了,存储不了我们伟大的汉字,最找也有提出将汉字转化为拼音存入计算机的想法,但经过国人的不屑努力,开发出了GB2312的国内最早,用得最多的简体中文编码;
BIG5:与此同时港澳台同胞开发了BIG5来编码繁体汉字;
GBK:GB2312的扩充,把BIG5码的思想融入进来,既可以表示简体中文也可以表示繁体中文;
GB18030:GBK的扩充,可以表示少数民族的字符,现在的国标码;
Shift_JIS/Euc_kr:深受我大中华文化熏陶的周边国家日本,韩国方块象形字,在计算机引进后一样遇到了这样的问题,就自己开发了各自的国标码;
Unicode:每个国家都来一套国标码,那大家还怎么记?最重要跨国合作项目还做不做?因为大家的项目编码不同的话一样遇到乱码的,于是天下大事分久必合,Unicode诞生了;
UTF-8:Unicode已经满足要求了啊,为啥还有UTF-8,那是因为Unicode使用2个字节,但对于老美的字母存储来说,一个字节完全够用,用Unicode强行加大存储负担,本来ASCII码,1T的内容,强行被Unicode整出了2T,但是现在中,日,韩等象形字国家这么多,老美又避免不了和他们网络交流,于是UTF-8可变长的编码就诞生了,UTF-8,一个字节表示字母,3个字节普通汉字,4~6个字节表示生僻字;
UTF-16/??:这个编码方式还没正式推出和使用,据说设计时汉字会回复2个字节表示,对我们比较有利,当然,期间不免还会有其它较为常用的编码出现,靠大家一起努力了。
下表是常用的编码和表示汉字或字母时的字节数:
编码 | 字母 | 汉字 |
---|---|---|
ISO8859-1/ASCII | 1个字节 | 无法表示 |
GBK/GB18030/Unicode | 2个字节 | 通常的2个字节(生僻字4个字节) |
UTF-8 | 1个字节 | 通常的3个字节(生僻字4~6个字节) |