找回密码
 注册
查看: 5187|回复: 0

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
! t5 j2 x4 ]% v+ ~include
4 |- |2 b7 k. \#include
" u0 J( T2 ~6 t8 G#include
/ u1 C# M1 j; r) L9 E# H: {5 h. B#include 9 U8 m, B% b7 R" _6 x
#include 7 D% }) n$ Z6 c7 C7 x# f% t
7 z  H1 B& u- ~& |. j6 c/ N9 j
char * j2f(char *s)
- |* d% P. z% U) E( @{3 d) B/ l# }/ v% f2 u1 C
int n=strlen(s);
+ ]9 H& w% e1 R int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
8 m1 u- P6 {4 B if (!r)% c, Y2 h: a3 U8 x* b  S2 {2 f
return NULL;
4 n( l$ d0 H7 B: j" N char *ft=new char[r+1];
5 V% n/ |" }1 \( u1 c% o r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
0 c- d( f$ @: e3 P& j if (r) {
4 d8 N2 y/ x4 c& R6 H1 s  B ft[r]=0;
/ y6 `' T  A, l8 d: ]/ O wchar_t *pws=new wchar_t[r+1];% Q3 r% e- n4 G( J( O! v. |1 i
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);% j7 `, O. ]$ u1 j' _
BOOL f=FALSE;
8 v( L. R1 |- p$ d# T r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5: k2 `+ D/ ]7 D8 n) K
ft[r1]=0;7 _+ E6 [: a5 V( y
delete [] pws;
" O& k) |6 O, \& z }; R3 U0 l/ B4 U. t4 b/ h
strncpy(s,ft strlen(s));. }$ A! u* v8 A: h; F6 o' I8 j: @
delete []ft;
" L2 ~% m0 T3 h( U) z% z. P return s; 3 p% }! k; c8 F- a0 l7 }
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 07:55 , Processed in 0.016354 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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