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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
$ b4 K9 X1 v1 w/ ^$ oinclude & ]' g; m- R9 b6 \* T1 {
#include
8 C9 n5 L; J0 H2 J5 z$ {#include
7 x0 k, |6 z" A4 m6 |#include 0 v  w  L/ e* e" Y0 ~
#include
1 w! C% B% j3 A8 p2 h( }  a( j1 n$ z4 V3 y$ \! S2 @2 E2 M
char * j2f(char *s), H, y5 `+ j- q$ X) H+ N9 l, `
{
; R" B0 G0 C4 e int n=strlen(s);$ E( Z: j7 t# ?) _1 t
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
5 z" ?) G, \. U& E/ E" K/ o if (!r)7 |3 a; t3 c8 U9 z! j2 r
return NULL;8 W/ Q2 \4 W! M6 V7 U; `
char *ft=new char[r+1];
( N% Y, d8 q8 y: s; h r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
0 t: N2 p# J0 C$ ` if (r) {
! H7 y6 n/ K: S0 V ft[r]=0;
: e8 M- l) d, Q7 J2 o# X wchar_t *pws=new wchar_t[r+1];8 Y1 {# h2 l" r; j$ m' I! v
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);4 P$ D/ D( ?1 X3 Z# z0 q
BOOL f=FALSE;
+ f4 b9 A8 ~1 X" W+ p% N r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
9 c/ B7 Z/ c' h' n, R: e5 n ft[r1]=0;! @+ i$ X4 ?5 F# q& @( |+ n: m3 z$ `
delete [] pws;: C1 Q& @4 y5 P) W
}0 u7 |0 Y, B7 q& i0 t- Z1 W
strncpy(s,ft strlen(s));; q& A0 Z( q; n1 a* g
delete []ft;
! f1 }9 B7 W  B* K' _4 Q( S( o2 Z return s; - A- b6 B, ?% \5 S3 C5 Y
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 09:18 , Processed in 0.015785 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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