字符编码相关

来源:互联网 发布:海思四核3798m阿里云 编辑:程序博客网 时间:2024/05/20 09:46

Ascii     0-127       空格、标点符号、数字、大小写字母

         128-255   扩展字符集

 

GB2312(全角字符):把扩展字符集取消掉,两个大于127的字符连接在一起时就表示一个汉字,

         高字节(0xA1--0xF7,低字节(0xA1--0xFE.可以组合7000多简体汉字

         0-127继续保持Ascii--半角字符)

 

GBK     高字节大于127,低字节无要求。组合后,包括了GB2312的所有字符,同时又增加了近20000个新的汉字和符号。

 

GB18030:继续扩展,又加了几千个新的少数民族的字。

 

 

以上标准通称做DBCSDouble 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编码产生了编码冲撞的原因。

0 0
原创粉丝点击