字符编码介绍:
为什么编码要用二进制表示:
1:二进制编码中仅有0和1两个数码,很容易用二态的物理元件来表示,也就是说,计算机内部采用二进制进行数据运算和处理,0和1两个数码,可代表逻辑代数的“真”和“假”
2:二进制运算规则少,计算机运算器的结构可大大简化,控制也相应简单,数据的传输和处理不容易出错,计算机的工作可靠性大大提高
3:用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高和低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低
4:易于进行转换,二进制与十进制数易于互相转换
二进制:
一切字符编码的基础,二进制
ASCII编码是美国的信息交换标准码,也是其他编码的祖师爷 因此只需要表示出英文字母和少数的标点符号以及操作控制符号即可,于是把这些需要编码的字符编到了0-127号(包括127),这种编码方式就是ASCI
标准ASCII编码是用一个字节的(7)位二进制表示一个字符(每个字节的最高位都是0)ASCII编码用一个字节表示,所以8位能够表示256个字符,足够用来表示所有的大写和小写字母,数字0~9,标点符号,
以及在美式英语中使用的特殊控制字符,实际上美国只用了128个字符,剩下的就空着了
GB2312 :一个字节最多只能编码256个字符,对于世界上的语言字符来说远远不够,比如中文的汉字就有许许多多,因此中国采用了GB2312、GBK、GB18030等双字节字符集(DBCS)的编码方案,就是国标的拼音,还有各个国家和语言采用了各自的编码方案,编码方案不统一的问题就造成了很大的困扰
Unicode:面对这些编码困扰的局面,国际标准化组织(ISO)决定来解决这个问题,然后就做了一个包含了地球上所有文化、字母、符号的编码方案Unicode,并且统一采用双字节,对于原来的单字节的符号,低位编码不变,扩展其高位为0变为双字节符号,这样就解决了标准与统一的问题
但是Unicode不断也有问题出现,一是计算机如何区分编码为Unicode字符还是两个ASCII字符,二是半角符号(就是原来的ASCII编码里的一字节字符)只占用了一个字节的空间,Unicode占用了双倍的空间,对于英文字母等半角字符来说,直接多占用了一倍的空间,这是极大的浪费,因此,Unicode在很长的一段时间内难以推广,所有后面就有了UTF编码
UTF:直到后来UTF标准的出现,Unicode才得到更好的使用,UTF是一种字符在网络上的传输方案,专为数据传输而设计,UTF-16就是一次传输16位的数据,UTF-8就是一次传输8位的数据
UTF - 8的最大特点就是它是一种可变长度的编码方式,不像ASCII编码,使用一个字节代表一个字符,字符在别的范围内时,又是另外的长度,比如中文使用三个字节的长度
所以UTF - 8,是对Unicode编码的压缩和优化,所以UTF - 8包含Unicode,使用了两个字节,ASCII中使用1个字节
ISO 8859 - 1: 它是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号,是西欧那边使用的
把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性,HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集
ANSI: 我们知道随着计算机的大量应用,各个国家也都有了自己的编码和自己的编码方案,所以,中国有了GB2312、GBK等这些可以编入更多的文字,日本有了Shift_JIS等
这些编码方案称为 "DBCS"( 双字节字符集)即是用双字节表示一个字符,也称为ANSI
这里的ANSI代表了不同国家的不同编码方案,如果一台Windows操作系统设定为中文,那么ANSI就表示GBK(中文),如果设定为日本ANSI就表示Shift_JIS。ANSI虽然能够表示全世界的字符,但是产生两个比较麻烦的问题
1:如果使用ANSI编码的一篇文章,被台湾人拿去,打开后全是乱码;这是因为台湾地区使用的是BIG5码,不同的地区编码虽然都称作ANSI,但是互相之间没有算法做出转换,这大大影响了阻碍各地区各国家之间的交流
BIG5:在中国台湾、中国香港、中国澳门这些地区普遍使用繁体中文的情况下,当地电脑软件或操作系统经常使用Big5(又称大五码)作为繁体中文的默认文字编码,这一点可以类比简体中文系统中常见的GBK编码,同GBK编码一样,Big5编码也是采用双字节编码,兼容ASCII码。也就是说每个繁体中文汉字在Big5下占据2字节
最早的正式版Big5是1984年由中国台湾地区“资策会”订制(即BIG5-1984)编码总共收录了13053个汉字,其中常用字5401个,次常用字7652个,还收录了408个标点符号或特殊符号
这里需要注意的是Big5编码并没有充分考虑到简体中文,虽然最终的Big5编码中包含了一些简体中文的常见字,但是并不全,导致你书写简体中文如果用Big5编码的话,有些字是打不出来的,所以非常不建议在简体中文环境中使用Big5,举个例子,“因为”的“为”子在简体中文里面非常常见,然而Big5编码中并没有简体的“为”字,在港澳台的繁体中文里面,“因为”的“为”应写作繁体中文“為”