几个基本字符集(转自网络)
ASCII
參考:http://zh.wikipedia.org/wiki/ASCII
American Standard Code for Information Interchange,美国信息交换标准代码
用一个字节表示128个字符。当中不可显示字符33个.33个字符中有一些是已经废除的控制字符。
另外就是95个可显示字符。
128个字符显然不够用。仅仅能支持26个英文字母,阿拉伯数字和标点符号。
详细字符表參考上面的wiki地址。
注意,一个字节最多能够表示256个字符。可是ASCII并没有使用最高位。因此7位仅仅能表示128个字符。
ISO/IEC 8859-1
參考:http://zh.wikipedia.org/wiki/ISO/IEC_8859-1
既然ASCII有高位不用,这么浪费。8859-1又称Latin-1字符集在ASCII后面空置的0xA0-0xFF的范围内,增加96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。
这个字符集仍然不能支持全世界的语言文字。
GB2312
參考:http://zh.wikipedia.org/wiki/Gb2312
GB 2312 是中国国家标准中文简体字符集,全称《信息交换用汉字编码字符集·基本集》,又稱GB0。
GB 2312标准共收录6763个汉字,当中一级汉字3755个,二级汉字3008个。同一时候收录了包含拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。
GB2312并不能支持全部罕见字,因此又有后来的GB系列字符集。
2312字符集单位是区,每一个区包括94个字符或者汉字.一共同拥有94个区。
10-15区及88-94区没实用。
汉字在2312中用两个字节表示。高位字节是区的编号+0xA0,低位字节是该区的汉字所在编号+0xA0。比方'啊'字,在2312的16区第一个。
因此两个字节表示为:0xB0=0xA0+16,0xA1=0xA0+1 也就是:0xB0A1.
这样的加上0xA0的编码方法叫做EUC.參考:http://zh.wikipedia.org/wiki/EUC
完整字符集表參考:http://www.knowsky.com/resource/gb2312tbl.htm
注意,总是两个字节表示字符。比方A的相应编码是0xA3C0.
这些在2312字符集中的字符都是全角。
Unicode
unicode(统一码)用来表示全世界全部文字。而且仍然在不断发展。參考:http://baike.baidu.com/view/40801.htm和http://zh.wikipedia.org/zh-cn/Unicode
编码方式:
Unicode用数字0-0x10FFFF来映射这些字符。最多能够容纳1114112个字符。
实现方式:
我个人的理解是,用哪个整数代表某个字符是Unicode规范说了算。可是这个整数怎样在内存中存储,在网络上传输,能够有不同的实现方式。举例来说:utf-8编码就是用1-4个字节来表示整数的一种变长实现方式,能够节省存储空间和网络传送的数据量。
Unicode的实现方式不同于编码方式。
一个字符的Unicode编码是确定的。
可是在实际传输过程中,因为不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)
UTF-8节省空间,是1到4个字节的变长存储方式。參考:http://zh.wikipedia.org/wiki/UTF-8
UTF-16固定为两字节表示,可是依据字节顺序的不同,又有UTF-16 BE和LE之差别