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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : & ^5 G3 {4 K; V3 O
include 9 f' F1 V9 c7 l2 G7 O
#include
0 u1 Z3 w+ \( D' n4 i" \#include
$ N+ V* X* o! a3 m: V2 K#include
8 i/ V6 P, R: a6 i( d; w- i3 W4 \#include " Q+ v* o5 R. b# F1 c
6 n( k0 ?* \. e
char * j2f(char *s)
7 \1 ~2 W( ^9 V# J+ [{+ u1 V' a9 U4 _9 V
int n=strlen(s);
3 M+ H+ J& p8 o0 B4 C int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);+ @" @/ a/ i  o7 C  k% ?% j  X# a; W
if (!r)% q/ g- \# \( s3 F
return NULL;( N6 T6 e: d5 X5 i# |; U
char *ft=new char[r+1];
; l! p( {+ v3 }! R6 S) B r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来( L6 [9 }/ C, w* Z
if (r) {1 j- e) N' t  c( M: V2 J
ft[r]=0;/ T8 y  k, w4 {1 }
wchar_t *pws=new wchar_t[r+1];
; d0 H* I; M! W+ D! a. {1 [ int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);1 n* u+ h  e' M6 g6 h1 w6 w
BOOL f=FALSE;' e: n+ l+ d; C7 u( Z
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big51 S4 S' g' @; O: e  ~; p
ft[r1]=0;: E6 F- R6 k, S3 v8 J: {6 c/ {
delete [] pws;
9 A" g+ K; |  V0 x }
6 V- u6 x0 k: b3 L- t: Q; k9 }* i, \ strncpy(s,ft strlen(s));1 B$ k+ @+ y! U, S' t" e, u7 s
delete []ft;
  A% R; x' H7 s' p! I/ y: | return s; " D. {- M' t$ Y9 V
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 08:03 , Processed in 0.019113 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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