我所理解的字符编码
1,Ascii和ebcic.
为了方便交流,美国人发明了ASCII编码,后来被确认为国际标准。后来以发明了EBCDIC编码。
一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统(MVS 、OS/390等)采用EBCDIC 编码。在发送数据给对方前,需要事先告知对方自己所使用的编码,或者通过转码,使不同编码方案的两个系统可沟通自如。无论是ASCII码还是EBCDIC码,都无法对拥有几万个的汉字进行编码。
2、MBCS
为了扩充ascii,不同的国家和地区制定了不同的标准。以中国和日本为例,发布了gb2312,gbk,gis等,他们的大致编码方式是不管理中文、英文等都使用两个字符来表示一个字符。统称为ansi编码,又称为多字节字符集MBCS.这时,不同国家和地区的编码不能相互转换,后来,国际就发布了unicode编码,作为联接各国的编程。尽管现在的unicode并不能真正联接万国,但其目的是这样的。所以,有人叫unicode为万国编码。
Unicode变成所有编码转换的中间介质。所有的编码都有一个转换器可以转换到Unicode,而Unicode也可以转换到其他所有的编码。
3、GB-2312
GB-2312属于ansi编码的一种,GB 2312是一个简体中文字符集,由6763个常用汉字和682个全角的非汉字字符组成。由于字符数量比较大,GB2312采用了二维矩阵编码法对所有字符进行编码。首先构造一个94行94列的方阵,对每一行称为一个“区”,每一列称为一个“位”,然后将所有字符依照下表的规律填写到方阵中。这样所有的字符在方阵中都有一个唯一的位置,这个位置可以用区号、位号合成表示,称为字符的区位码。如第一个汉字“啊”出现在第16区的第1位上,其区位码为1601。因为区位码同字符的位置是完全对应的,因此区位码同字符之间也是一一对应的。这样所有的字符都可通过其区位码转换为数字编码信息。
4、GBK
GBK即汉字内码扩展规范,K为扩展的汉语拼音中“扩”字的声母。GBK编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。
5、unicode
如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。
Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,“汉”这个字的Unicode编码是U+6C49。
Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。
6、utf-8
为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。