Ascii: 0-127 空格、标点符号、数字、大小写字母
128-255 扩展字符集
GB2312(全角字符):把扩展字符集取消掉,两个大于127的字符连接在一起时就表示一个汉字,
高字节(0xA1--0xF7),低字节(0xA1--0xFE).可以组合7000多简体汉字
(0-127 继续保持Ascii--半角字符)
GBK: 高字节大于127,低字节无要求。组合后,包括了GB2312的所有字符,同时又增加了近20000个新的汉字和符号。
GB18030:继续扩展,又加了几千个新的少数民族的字。
以上标准通称做DBCS(Double Byte Charecter Set 双字节字符集)
-------------------------------------------------------------
ISO
UNICODE (Universal Multiple-Octet Coded Character Set),简称UCS,用16位来表示所有的字符,可以
组合出65535个字符。Ascii的半角字符保持不变,只是由8位变成16位来保存(即高字节都是0)。
此时,发现strlen函数靠不住了,一个汉字不再是两个字符,而是一个,
从UNICODE开始,无论是半角英文字母,还是全角的汉字,都统一是一个字符,都是统一用两个字节来保存。
注意:字节与字符->
字节:是一个8位的物理存贮单元;
字符:是一个文化相关的符号。
从WINDOWS NT开始,就都用UNICODE。
若还还不够用,ISO准备了UCS-4方案,即用四个字节来表示一个字符,
这样可以组合出21亿个不同的字符。
UTF (UCS Transfer Format):
UTF8: 每次传输8位数据
UTF16 每次传输16位数据
在网络里传递信息时有一个很重要的问题,就是对于数据高低位的解读方式,一些计算机是采用低位先发送的方法,例如我们PC机采用的 INTEL 架构,而另一些是采用高位先发送的方式,在网络中交换数据时,为了核对双方对于高低位的认识是否是一致的,采用了一种很简便的方法,就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位,那就发送"FEFF",反之,则发送"FFFE"。不信你可以用二进制方式打开一个UTF-X格式的文件,看看开头两个字节是不是这两个字节?
讲到这里,我们再顺便说说一个很著名的奇怪现象:当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵,有人说这就是联通之所以拼不过移动的原因。
其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。