潇's profile老肖的地盘PhotosBlogListsMore ![]() | Help |
|
March 14 字符集的一些点滴字符集一直是我的噩梦……从我很小的时候就开始了,那个时候我几乎不懂什么编程,但我知道我国古代有一位伟大的军事家、政治家、文学家变巨。当然,你可能没听说过变巨,但你肯定听说过曹操。是的,BIG5码中的曹操转到国标码那就是变巨。记得当时没少咒骂那些不肯把文字简体中文化的游戏代理商,也没少咒骂那些所谓的内码转换工具。好吧,废话少说,今天上了课,基本上消除了90%对字符串的恐惧,以下随便说一些,主要说说几种双字节和多字节编码:
GB2312-80,传说中的中华人民共和国国家标准汉字信息交换用编码,该编码为双字节编码,高字节的范围位0xA0-0xFE,低字节为0xA0-0xFE,编码空间为……额,94*94=8836,(其中0xB0-0xF7是汉字区)该编码又通过高低位分为94个区与94个位,就成了传说中的区位码,除去了数字啊,符号啊以及空白编码,给汉字留下的,只有6000多个。我天朝文化博大精深,汉字岂是这6000多个编码能够包罗的,所以可以看出,这个编码的确不怎么能满足需要,甚至我国前总理朱镕基的镕字都不在这个字符集中。
GB13000,又叫GBK,K的意思是扩展,再怎么说,我们也不能打不出总理的名字,所以在1995年,信息技术化技术委员会又制定了GBK编码,其编码空间有了大幅度的扩充,单字节编码空间是0x00-0x7F,和ASCII码兼容。双字节编码中,高字节是0x81-0xFE,低字节是0x40-0x7E以及0x80-0xFE,以低字节7F为界,以上的都是与GB2312兼容,以下则是生僻字。GBK一共收入了21886个汉字符号,其分布如下图: 汉字区: GBK/2:OXBOA1-F7FE, 收录 GB2312 汉字 6763 个 GBK/3:OX8140-AOFE,收录 CJK 汉字 6080 个 GBK/4:OXAA40-FEAO,收录 CJK 汉字和增补的汉字 8160 个 图形符号区: GBK/1:OXA1A1-A9FE,GB2312 符号+增补其它符号 GBK/5:OXA840-A9AO,扩除非汉字区 用户自定义区 : 即 GBK 区域中的空白区,用户可以自己定义字符
在2000年,我天朝又高瞻远瞩的扩充了编码,考虑到民族团结,将少数民族文字加入,也考虑到曾经的几个属国,所以把日语,韩语符号加入到了编码,于是GB18030-2000应运而生,考虑到囊括内容众多,所以编码最多为四字节……其规则为单字节:0x0~0x7F,双字节:高字节:0x81~0xFE 低字节:0x40~0x7E 0x80~0xFE(兼容GBK),四字节:第1、3字节:0X81~0XFE 第2、4字节:0X30~0X39 unicode,这个东西是我们听的最多的了,也是国际推荐的编码方式,其产生就不再多说,unicode有多种使用方式,也就是我们尝尝听说的UTF-8 UTF-16 UTF-32,这类的。 所谓UTF-32,就是用32位去表示一个编码……试想就一串英文也要用每个字母32位去编码,那么存储空间就凭空变成原来的四倍,用张指导的话说,那就是不合理。 UTF-16嘛,这个编码的方法是,如果编码U小于0x10000,则直接用16位来表示,如果编码U大于0x10000,由于unicode编码最大范围为0x10FFFF,从0x10000到0x10FFFF直接共有0xFFFFF个编码,也就是要20个bit就可以表示这些编码。一个编码U,将其前10bit作为低位和0xD800进行或操作,将后10bit作为低位和0xDC做或操作。这样就组成了4个BYTE的编码。这个东西的好处嘛……大部分编码都以固定长度存储,但无法相容于ASCII编码。 UTF-8,也是一个变长的编码,用1~4个Byte来表示一个编码,当长度位1Byte时,和ASCII对应,当是两个Byte时,表示拉丁文,希伯来文,3个时,表示CJK中的字符,当4个,表示其它的字符。其编码规则如下表:
以上,把国内几个主流的编码简述了一下……至于其它的编码BIG5啊,之类的,需要使用的时候再去查查资料,unicode真是一种好的解决方案。 TrackbacksThe trackback URL for this entry is: http://seanxiaoxiao.spaces.live.com/blog/cns!7677365E5B9342DE!671.trak Weblogs that reference this entry
|
|
|