Chinaunix

标题: 汉字字模原理 [打印本页]

作者: cdy_0    时间: 2007-07-16 03:03
标题: 汉字字模原理

    1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。
    2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。
    3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.
    以上所述编码即国际码
    4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.
    5.区位码
    在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。
    我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):
    01-09区        特殊字符区
    10-55区        一级汉字区
    56-87区        二级汉字区
   
    在汉字字库中:
    区码=机内码第一字节-0xA0H
    位码=机内码第二字节-0xA0H
    6.国际码 区位码 机内码 之间的关系:
    机内码=国际码+8080H
    区位码=机内码-0xA0H
    国际码=区位码+2020H
    如:“陈”的汉字区位码:1934(16进制为 1322H)
    在Linux下,用文本编辑器输入"陈",保存为test
    od -h test
    显示为:
    0000000 c2b3 000a
    0000003
   
    区码=b3-a0=13
    位码=c2-a0=22
(未完)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/40925/showart_340671.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2