找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 2696|回复: 1

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

[复制链接]
发表于 2008-9-4 15:09 | 显示全部楼层 |阅读模式
大牛们拿去研究看能应用上不能,节省时间出成绩啊,呵呵! B8 d& R7 U' U9 X; Y2 p+ C

; P) `- Y: z8 x* ^) q! V+ `* G- B* {2 w0 m
unicode到gbk的转换程序1 U% l: E: i/ q* l
unsigned char Unicode_to_GBK(unsigned char *ch)
( k+ o; P: J. I, ~; b& Z6 G/ n{
0 V, Z/ ~& h$ @4 j8 K        unsigned int temp; + S$ V! S1 Q4 I! j, n( O. C
        unsigned int sector_offset;//扇区偏移 3 g/ J( E* P& k: @! @1 \6 i
        unsigned int byte_offset;//字节偏移
4 d; y1 V; Y/ N3 M! A, e) P        unsigned char buffer[512]; ) Y7 Z/ `9 ^7 h' N5 |. B
        temp = *((unsigned int*)ch);//由于FAT中文件民unicode码是 地字节在前,所以要按uint型读
: ]" y+ F6 t% I/ x/ P* F        temp -= 0x4e00;//减去基础数据 7 L9 u3 T6 q8 y* |8 f4 ?; v( Z6 @
        temp *= 2;//每个汉字两个字节
$ I+ E# Z1 m# o: Q! I* k        sector_offset = temp/BytesPerSector;//计算出扇区偏移,确定存在哪个扇区
, f( U9 {; @4 R; a3 l        byte_offset = temp%BytesPerSector;//存在哪个字节 ! n' C7 `. ]- c3 N. s. P! J8 f
        if(FAT_ReadSector(UNI2GBK + sector_offset,buffer))return 1;//读那个扇区
3 C& }7 I& c  |/ T, B, N        *ch = buffer[byte_offset];//将数据读出 8 o: `8 Y# Z+ q* E
        *(ch+1) = buffer[byte_offset+1]; * [- m+ R+ _  C2 H5 x
        return 0; & A! C5 ?9 T' ]; N- z
} 7 _) Y: L, Q/ H
要注意的是FAT中文件名的存放方式是低字节在前,而gbk的存放是高字节在前,操作时不要搞混了。 - W4 z& m3 j. j: v! H, k
/ E# E' p! U! f( N$ X. U, R! U

9 J! a8 K; O# J! E6 X7 k! W" C; p5 V$ h: y! a
7 x8 h2 H! r' D% J; z; C# W) l
附件1是两个字库
  }  a9 ^  q4 I  f
6 y2 T7 |/ L, y# e9 m+ m: L4 ^0 v: A" J, z
两者之间的转化这能通过查表,两者没有对应关系。所以要建一张unicode-2312的对照表。 * ^! \6 S$ Q, X2 u; W
当然如过想节省程序运行时间,要建两张表,分别按照各自的线性关系放,这样就免去查找的所耗的时间了。但是这样字库就会变大。我觉得用空间去换取速度可行。
+ F7 Q4 }# S+ Z; [7 a' L/ t# A. u/ a. [
附件2是两个转换好的码表6 J& O: ~% a+ H/ j2 O

7 m# I: L: R3 n8 T8 h0 B  k# k% guni2gbk.sys为unicode转gbk的表,从unicode的0x4e00 到0x9fa5 顺序存放着相应的gbk码,总共20902个汉字,对应的文件是41804Bytes
6 f" v! U9 X0 V5 j4 |) R5 d5 E  l注:由于没有找到一些符号的unicode对照表,因此这张表中只包含了汉字部分。因此不能显示诸如“”()等符号,程序中要做相应处理。
5 q3 a4 L+ i+ E2 l, c# y4 |注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00 : D' d9 r2 p( P1 ~/ F
9 s+ g" P. ~/ N) M5 I9 M
gbk2uni.sys为gbk转unicode的表,从gbk的0x8140 到0xfeff 即126*192 = 24192按照gbk的编码顺序放,为了线形查找,其中不合法的或根据资料没有相应unicode码的都作了填零处理。文件大小为48384Bytes 6 I4 a" M; N9 v6 ~" ]( C
注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00

ziku.rar

66.36 KB, 下载次数: 821

uni2gbk.rar

50.9 KB, 下载次数: 846

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2008-9-4 15:34 | 显示全部楼层
palm中文编码规则可以参看下面官方介绍# R6 E, F6 E2 ^. G
  M& n/ Q4 L& t
http://kb.palmsource.com/cgi-bin ... fc2VhcmNoX3RleHQ9Y2

CP936.TXT

790.47 KB, 下载次数: 789

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-2 03:38 , Processed in 0.326598 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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