GBK的中文编码是双字节
来表示的,英文用ASCII,但GBK编码表中也有英文字符双字节
表示形式,所以英文字母可以有2中GBK表示方式.为区分中文,将其最高位都定成1.英文单字节最高位
都为0.当用GBK解码时,若高字节最高位为0,则用ASCII码表解码;若高字节最高位为1,则用GBK编码表解码
.
GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
gb2312:第1位为1,第2位为1,基于区位码设计
区位码一般用10进制数来表示,如1601就表示16区1位,对应的字符是"啊".在区位码的区号和位号上分别加上0xA0就得到了GB2312编码
区位码中01-09区
是符号,数字区
,16-87区
是汉字区
,10-15和88-94是未定义的空白区
.它将收录的汉字分成两级:第一级是常用汉字计3755个
,置于16-55区
,按汉语拼音字母/笔形
顺序排列;第二级汉字是次常用汉字计3008
个,置于56-87区,按部首/笔画
顺序排列.
gb2312,还包括希腊字母,日文平假名及片假名字母,俄语西里尔字母
,实际编码范围是0xA1A1-0xF7FE
,
gbk:第1位为1,第2位可能为0
GBK的整体编码范围是为0x8140-0xFEFE
,不包括低字节是0*7F
的组合.高字节范围是0*81-0xFE
,低字节范围是0x(40-7E,用了一半要小心,要先判断前一个字母)和0x80-0xFE
.
因此小于0x80
的字节未必是ASCII符号;且最好选用小于0*40的ASCII
符号做特殊符号
,可快速定位,不用担心是某个汉字的另一半.如不要用|
等.
GB18030编码向下兼容GBK和GB2312
,兼容的含义是不仅字符兼容,且相同字符相同编码
.GBK和GB2312
都是双字节等宽
编码,如果算上和ASCII兼容所支持的单字节,也可以理解为是单字节和双字节
混合的变长
编码.GB18030
编码是变长编码,有单字节,双字节和四字节三种方式.GB18030
的单字节编码范围是0x00-0x7F
,完全等同与ASCII;双字节编码的范围和GBK相同,高字节是0x81-0xFE
,低字节的编码范围是0x40-0x7E和0x80-FE
;四字节编码中第1,3
字节的编码范围是0x81-0xFE
,2,4
字节是0x30-0x39
.(这里可以将再猛一点,将前0x40都利用起来
,10*10*10000
,百万个字符
),
微软CP936
用0x80
来表示欧元
,
0x80是CP936对GBK的扩展,而GB18030只是良好兼容GBK
.GBK,GB2312等与UTF8之间都必须通过Unicode编码才能相互转换
都是折腾.一个映射的事.GBK,GB2312以及Unicode
都既是字符集
,也是编码方式
,而UTF-8
只是编码方式,并不是字符集
GBK编码中英文字符
只占一个字节.
无等待
,其实就是尽量减少
共享块时间.尽量减少竞争
.