找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 2735|回复: 1

[写号相关] unicode码表和转换程序

[复制链接]
发表于 2008-9-4 15:09 | 显示全部楼层 |阅读模式
大牛们拿去研究看能应用上不能,节省时间出成绩啊,呵呵# T: L  U! U/ q$ K0 C' x
/ g5 o3 n8 F/ M: X4 `' q$ p) t: c* P
& j% X2 K0 Y# }$ `, t6 c: I
unicode到gbk的转换程序6 t7 ^* u! W5 p2 A2 b
unsigned char Unicode_to_GBK(unsigned char *ch) ) Q8 L: S6 p. I! U' F" h, f
{ ) o" w9 o. v2 H1 N9 B
        unsigned int temp;
, z, ~5 Q  w5 t' ?        unsigned int sector_offset;//扇区偏移
& w) W. {6 M9 W: z3 d        unsigned int byte_offset;//字节偏移 4 j, {4 ]2 j7 {3 k
        unsigned char buffer[512];
: p/ G  D' o7 S' t        temp = *((unsigned int*)ch);//由于FAT中文件民unicode码是 地字节在前,所以要按uint型读 * W7 l! P* w, {" N
        temp -= 0x4e00;//减去基础数据
. ]! m5 M  V7 [        temp *= 2;//每个汉字两个字节 $ q$ B# I6 D# e! Z( p4 p
        sector_offset = temp/BytesPerSector;//计算出扇区偏移,确定存在哪个扇区
0 h% K% ?4 w3 U0 \        byte_offset = temp%BytesPerSector;//存在哪个字节 ' \3 t% T/ K8 T$ V2 W  ]
        if(FAT_ReadSector(UNI2GBK + sector_offset,buffer))return 1;//读那个扇区 ! T. K0 @7 B) c& F# d$ k# v6 a
        *ch = buffer[byte_offset];//将数据读出 # _' v( S: i8 R; k
        *(ch+1) = buffer[byte_offset+1];
5 l9 y9 ]/ M  M, y8 X) \, }        return 0;
: _: i) p. t$ U2 x& \} 8 \; }7 u+ Z( @& b7 c2 c" z/ X- x" z
要注意的是FAT中文件名的存放方式是低字节在前,而gbk的存放是高字节在前,操作时不要搞混了。
3 Z) j( W* r1 q. e4 Q) r/ |1 ~: ~$ i; b7 o3 T& b. s2 f
; C9 B0 g% S7 a$ @7 R
$ c) B$ h/ o- t6 u

) B0 T! ?0 Q/ s4 P; z+ U$ T附件1是两个字库
8 u: N' X9 I' D; o9 t% H
1 W% |3 i+ H$ H5 T& Q$ r; h+ ~4 z+ m
. P6 f% D* E# L4 D3 }: x3 q两者之间的转化这能通过查表,两者没有对应关系。所以要建一张unicode-2312的对照表。
9 U9 B- r% ]6 E, W# \当然如过想节省程序运行时间,要建两张表,分别按照各自的线性关系放,这样就免去查找的所耗的时间了。但是这样字库就会变大。我觉得用空间去换取速度可行。
- \) M. `/ S0 A& l  W+ u' |( b5 z+ S
附件2是两个转换好的码表" l4 U" Y5 O, i' b
$ k$ u, U' Z. h+ k+ f2 _; y
uni2gbk.sys为unicode转gbk的表,从unicode的0x4e00 到0x9fa5 顺序存放着相应的gbk码,总共20902个汉字,对应的文件是41804Bytes
. Q7 ]5 M7 V4 N% u/ N; [注:由于没有找到一些符号的unicode对照表,因此这张表中只包含了汉字部分。因此不能显示诸如“”()等符号,程序中要做相应处理。 . z' t: H4 U" J2 |
注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00   n4 h( b- N% j& D2 H: B0 q

- r! a3 i. P5 T; s! W: @gbk2uni.sys为gbk转unicode的表,从gbk的0x8140 到0xfeff 即126*192 = 24192按照gbk的编码顺序放,为了线形查找,其中不合法的或根据资料没有相应unicode码的都作了填零处理。文件大小为48384Bytes
! f. @( J, s+ _* p注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00

ziku.rar

66.36 KB, 下载次数: 846

uni2gbk.rar

50.9 KB, 下载次数: 871

评分

参与人数 1威望 +10 收起 理由
KING + 10 谢谢分享

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2008-9-4 15:34 | 显示全部楼层
palm中文编码规则可以参看下面官方介绍
! T% Q+ R" C6 E' E. U3 F# H& T1 `2 g7 q+ e& Z9 A- D
http://kb.palmsource.com/cgi-bin ... fc2VhcmNoX3RleHQ9Y2

CP936.TXT

790.47 KB, 下载次数: 807

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2025-4-19 15:21 , Processed in 0.331197 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表