潇's profile老肖的地盘PhotosBlogListsMore Tools Help

Blog


    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个汉字符号,其分布如下图:

    image

    汉字区:

    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个,表示其它的字符。其编码规则如下表:

    image 可以看出,编码第一字节有几个0,那么该编码就由几个字节构成,后续编码都是10开头,非常容易解析,而且和ASCII兼容。很好很强大。

     

    以上,把国内几个主流的编码简述了一下……至于其它的编码BIG5啊,之类的,需要使用的时候再去查查资料,unicode真是一种好的解决方案。

    Comments (2)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    潇 肖wrote:
    最近学到不少东西,不过感觉都很零碎,不成系统的
    Mar. 15
    Sophia Liwrote:
    又来你这里学习知识了,图要是再大点就好了~~
    Mar. 15

    Trackbacks

    The trackback URL for this entry is:
    http://seanxiaoxiao.spaces.live.com/blog/cns!7677365E5B9342DE!671.trak
    Weblogs that reference this entry
    • None