|
|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
% L3 J3 ~; r% b9 H% y" rinclude 8 z- B1 c9 k2 D
#include 1 a1 y. Q0 r& v8 \, E1 n& Q2 b2 t
#include
2 u3 X3 @ O9 |5 H5 j1 s#include
/ O/ R5 Q2 z$ p2 ?#include - W( c. Q% d% u8 h1 U4 T
# _& i. D5 B& Y) Q# d/ F' s
char * j2f(char *s)
3 }! P- k* i* s' R* t, Z{
" K( p6 z! s n int n=strlen(s);
; B5 q7 x5 N: R2 h$ ^ int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
; O$ C& N& p0 f. _ if (!r). v7 q4 C: o5 u+ S6 X5 m
return NULL;3 u: G a1 \# w7 V3 z5 K
char *ft=new char[r+1];) L! L W6 T5 i/ h/ p* |1 R
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来/ Y) R2 R3 \& V% a2 _
if (r) {" ?& u; Y) Z% A+ l" V6 b- |: u
ft[r]=0;
8 x$ y5 @3 A- C% Q' Q" i9 B$ O wchar_t *pws=new wchar_t[r+1];# q5 ^ W: G- W) \* H" I, b: v0 P" ~
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);! a) `: y5 [& {# Z7 ?
BOOL f=FALSE;
% k0 H; h8 A2 @4 v r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5' `. B7 c5 {- ^3 U" P u6 C
ft[r1]=0;
3 l( @9 c1 O( Q) ^! v delete [] pws;
( a y* x$ a. h8 \3 ? }$ l5 p& ?) }* i
strncpy(s,ft strlen(s));
( j2 R q, i: T7 v9 B; X$ c/ | delete []ft;
1 a2 u! ^. X! _ return s; # n5 h$ a0 ^/ q0 h: f
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|