冒险解谜游戏中文网 ChinaAVG
标题:
【汉化资料】汉字字模原理
[打印本页]
作者:
shane007
时间:
2009-5-20 11:21
标题:
【汉化资料】汉字字模原理
1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。
$ A* g3 B- z/ Q6 |) N, h) U+ p
2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。
' X" @* B6 \* i0 O
3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.
6 x4 R2 L" q5 V# g
0 Y% m2 C3 p( D% K5 `9 Z
以上所述编码即国际码
# I$ S: ~; o+ t# `% _1 ^, o
3 X5 a( K6 Z% z( z- r5 O) G
4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.
$ x+ l) ^% p+ m, ~/ L1 a
5.区位码
4 `( K3 O4 Y' U3 k2 `
在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。
1 b* S6 E1 e# v. J% ` ~2 d4 G
我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):
1 i3 t$ W6 h! L1 I1 X+ u: B( Z
m; x) u. V8 ^6 n0 K
01-09区 特殊字符区
' }9 E( R! g3 L0 s$ c, q
10-55区 一级汉字区
/ `7 ~9 k% @ p7 A N9 }, s
56-87区 二级汉字区
8 J5 `8 z% h, U d4 C% \/ g
& W, X4 L" p, o( b5 h; _& ~% t
在汉字字库中:
0 d& D/ ~/ `- } J: H
+ Z, O8 `! m _1 s$ u9 D
区码=机内码第一字节-0xA0H
* B' T) e. N6 `. i9 @
位码=机内码第二字节-0xA0H
3 ^+ Q% c- e+ i/ v5 [
. N ~& `6 g3 ~( U; o* T9 j
6.国际码 区位码 机内码 之间的关系:
4 z2 T w7 g; c6 b# z7 X1 A3 W$ p6 {4 n- U
. F i. n; d6 k# K+ _) ?
机内码=国际码+8080H
/ n$ @; i5 F- g9 C9 j
+ X$ X6 r9 L1 i% T
区位码=机内码-0xA0H
. m+ T6 r0 h# h4 ~5 I) [! _
v5 s5 R3 f& ^- ^1 R! d
国际码=区位码+2020H
- V/ ]4 W, v# P+ o- R5 ^
0 |0 F! P) z* c, ~% z4 Q
如:“陈”的汉字区位码:1934(16进制为 1322H)
, Y6 }- M9 p9 J& q- N/ e
在Linux下,用文本编辑器输入"陈",保存为test
1 }) Y+ ]3 L& V5 S( a* z
od -h test
! U& R7 b) U2 ~' L
显示为:
$ D; {- W& Y* y' @
0000000 c2b3 000a
% h3 s" Y0 x& f% ]; j, Q- d& g
0000003
5 e u8 D$ [8 _# Y4 w, p
) [* Q5 z p* a! l- B+ u
区码=b3-a0=13
) A: @+ q7 {3 C! b% Y
位码=c2-a0=22
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2