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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
8 X) I/ w; i, l" dinclude ) y0 l& [* }# D& |& o
#include
4 n/ n: y1 E% h% D. \" {#include 6 H* H9 c* Z# t, @* N
#include
0 h% G; P- f  X1 T#include - g# j# R& f) Q5 Z5 G4 ^
4 W  @$ v9 m8 L3 u2 n
char * j2f(char *s)1 d/ L/ [. g- V! P
{; `: K% X+ D9 i6 S4 m, D& [
int n=strlen(s);
) g. e/ X, A7 {5 _7 y int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
& f+ _; M$ O! k if (!r); ]* B1 o  M. X4 I: r+ {
return NULL;( a2 e) H& F% _7 Y& \; }, ~. n; J' y
char *ft=new char[r+1];1 T; ?# g. `5 y% I
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
, }) w' W+ a% u7 [9 c/ W6 `! N8 L if (r) {" o0 c: u! ~4 H+ }
ft[r]=0;
4 _/ K4 b- n4 q9 n9 ^0 L6 g; r wchar_t *pws=new wchar_t[r+1];( S$ `$ j, R/ v$ v; T
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);5 s' y  u0 x+ k+ p8 G
BOOL f=FALSE;2 m( p9 Y' ~+ ~6 h1 t2 W
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5" A& A7 p4 _. ?4 @* |" U  i
ft[r1]=0;3 B0 u( |( ]( T. Y+ {  x% x
delete [] pws;
9 I4 H8 \& u/ U+ p4 f }$ n" v: J, h7 F) V/ o" d
strncpy(s,ft strlen(s));9 d% |- E  L" v( r
delete []ft;, u) L6 I4 Y. A6 o+ k
return s; 7 F# z+ Q1 ~/ V( b# T& J
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 05:42 , Processed in 0.016775 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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