找回密码
 注册
搜索
查看: 4673|回复: 0

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : ' b- ~6 D$ T+ ^" d% W
include
5 W$ b. @/ ]' M, w2 o  Y1 W9 V3 O& ~#include " s: I, F5 g- h% X4 f3 r
#include
7 t5 d; a4 U  ]; R6 G% k" C#include
- s; d4 I6 A8 j& D: Y8 ~#include $ M8 w4 a& H* J0 B" Z. `
; K( @% u6 `# O) ]2 b1 G
char * j2f(char *s)
3 u$ ]& z, p4 T' x) w1 |/ Y+ S{
) W# r  t* H4 W int n=strlen(s);
0 d& s1 @6 R* {) j2 Z* N- z$ \2 a int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
* T4 F* F& X- Z# H* t; U4 d if (!r)! x4 m; r+ F/ I. U  ]
return NULL;
  I$ f0 `+ W* Q" x5 [ char *ft=new char[r+1];' |4 o1 ?- P, |' i, K, C3 f# w
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
) Y$ J+ M& `0 I. }1 C4 ]( f# P- r if (r) {" b8 Z: U- t" x5 _1 v* W9 o
ft[r]=0;
% F- y8 ~( A# v+ Z% M/ F" R& w wchar_t *pws=new wchar_t[r+1];* r5 Q! a9 |. d+ W" v
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
9 P8 @" T0 o' t$ D/ k BOOL f=FALSE;+ H, @. O) u2 p- r
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
' R5 x, ]) H, c& ~( F ft[r1]=0;. ?: R1 J1 w! ?7 J& u" w; ?1 c* |
delete [] pws;) b7 O$ c5 A, }! b/ f
}
" l+ Y0 z) F1 x2 R- X' T7 e" g# Z strncpy(s,ft strlen(s));
& i! E. b* s2 J6 G. {5 q delete []ft;
% ~5 e0 O; C/ p3 {6 F3 W7 k5 s' d) o return s; ; _& W; Q; X/ y, @# g
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-6-19 12:29 , Processed in 0.015055 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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