找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 2693|回复: 1

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

[复制链接]
发表于 2008-9-4 15:09 | 显示全部楼层 |阅读模式
大牛们拿去研究看能应用上不能,节省时间出成绩啊,呵呵. w  m+ C3 t" r/ C; p
7 e# a  ?: w6 l( g

0 d! I) |! Z0 d6 ]4 \& Y0 t$ [2 \unicode到gbk的转换程序
& w% p+ P0 h7 t3 R/ r: H8 P, Z, tunsigned char Unicode_to_GBK(unsigned char *ch) ! u. {4 u5 J7 q5 {) V
{
8 f" P" I+ J; ?* b5 @9 G! k: Q# B        unsigned int temp; " X  h, J) z: s
        unsigned int sector_offset;//扇区偏移
- F# n- J8 M: Z) H  [- }        unsigned int byte_offset;//字节偏移 2 e: `+ g% q$ @% D" P( i
        unsigned char buffer[512];
! Z- S" N6 d) T, F5 i( t        temp = *((unsigned int*)ch);//由于FAT中文件民unicode码是 地字节在前,所以要按uint型读
4 }. i' J% v+ V! S- n        temp -= 0x4e00;//减去基础数据
% A9 b( @$ l$ f2 G% C7 O! W0 ]        temp *= 2;//每个汉字两个字节 & S0 B& }! K  m  c
        sector_offset = temp/BytesPerSector;//计算出扇区偏移,确定存在哪个扇区 1 ]2 c) ~0 [4 U5 \9 i/ G
        byte_offset = temp%BytesPerSector;//存在哪个字节 2 p7 \6 i' C9 D2 N: ^+ v
        if(FAT_ReadSector(UNI2GBK + sector_offset,buffer))return 1;//读那个扇区
7 R/ T( C- w% E, U, E2 z. i        *ch = buffer[byte_offset];//将数据读出 . _0 h3 g- H3 u
        *(ch+1) = buffer[byte_offset+1]; & C7 T7 J. c1 g
        return 0; % f4 N' z* n5 E* j; ?
} 9 _% O/ O4 U7 ~5 G) p) Z
要注意的是FAT中文件名的存放方式是低字节在前,而gbk的存放是高字节在前,操作时不要搞混了。
3 B# y- l+ I' S! B
, ~( `- h( g) k; ?" X6 f+ @( i' M0 f; P9 n

5 n3 S( u5 Q$ Z, d  ~( @7 z& U7 m# v: q1 D* o, _$ J9 V. r2 d+ Z
附件1是两个字库
# r- J* F% g8 X% m$ Y, \) l3 C* e2 |' a! H; J( {

: z6 j3 }4 ^1 n两者之间的转化这能通过查表,两者没有对应关系。所以要建一张unicode-2312的对照表。 & N3 \  B! P( W0 i* e
当然如过想节省程序运行时间,要建两张表,分别按照各自的线性关系放,这样就免去查找的所耗的时间了。但是这样字库就会变大。我觉得用空间去换取速度可行。
& W1 f8 G% E, c' \1 s5 R; c: I7 ^: j* C" ?6 D
附件2是两个转换好的码表* }  w( [0 e! G2 j
) f4 ~0 W) o- [; v7 m+ Q
uni2gbk.sys为unicode转gbk的表,从unicode的0x4e00 到0x9fa5 顺序存放着相应的gbk码,总共20902个汉字,对应的文件是41804Bytes
8 L6 Z. v. K8 ?' n9 r$ D; N注:由于没有找到一些符号的unicode对照表,因此这张表中只包含了汉字部分。因此不能显示诸如“”()等符号,程序中要做相应处理。 # V( o* b  U9 K( H% C
注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00
+ N/ u0 I, T4 y. X: \' s, P% r; `* U6 T% [
gbk2uni.sys为gbk转unicode的表,从gbk的0x8140 到0xfeff 即126*192 = 24192按照gbk的编码顺序放,为了线形查找,其中不合法的或根据资料没有相应unicode码的都作了填零处理。文件大小为48384Bytes % B$ |' \' f+ q; p) ?0 z7 o
注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00

ziku.rar

66.36 KB, 下载次数: 818

uni2gbk.rar

50.9 KB, 下载次数: 840

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2008-9-4 15:34 | 显示全部楼层
palm中文编码规则可以参看下面官方介绍* D0 L, c# A3 O; ]0 l% ~! U) {( c0 o, E
, J. o. K5 J  T7 J- K% ]
http://kb.palmsource.com/cgi-bin ... fc2VhcmNoX3RleHQ9Y2

CP936.TXT

790.47 KB, 下载次数: 786

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 20:16 , Processed in 0.283606 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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