|
|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : , N. I4 m9 e: w( x6 E R( ^, d: u
include
3 t& p7 i" R& i" S6 @1 z2 f0 \/ m#include j5 C, H6 ~& c' ]
#include
/ e2 P w6 ^) c2 M3 ^: Q9 t#include
: {" E! t4 f' o+ {" E3 n#include
# g+ L- B5 L; \% c6 i9 r/ Q" t
, }: `. b8 n7 F& ]char * j2f(char *s)
6 {, k/ s: ~" r4 n1 l{
, o8 q3 ^$ p/ |: ?0 y int n=strlen(s);; T; R' ?$ P+ d5 C3 G
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
; O0 O. ]4 \1 P* J if (!r)% Y. h) O$ c2 ?' q/ o; D1 o
return NULL;
9 ~+ S, q/ {. D$ D0 H& s4 r char *ft=new char[r+1];1 d$ _; U8 L. k
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来& F* K" b, r. y/ d) q' s2 R
if (r) { @3 b) g6 t) q9 q K
ft[r]=0;
9 u/ N" X5 s4 y" o$ { wchar_t *pws=new wchar_t[r+1];
: t( E" K5 |' Q" m( }8 S int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
& h, s- A" l! J% I0 e: S BOOL f=FALSE;
; D9 C7 l: k8 ]! e- U5 G r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
1 Z ^2 m* D# Z- I Q ft[r1]=0;) ], u0 c L/ R: ?$ [
delete [] pws;
, Y* i0 Q$ s9 [0 `) J) s }/ P2 P; U: Q6 F1 m# [" z
strncpy(s,ft strlen(s));% D0 |) ^9 {. j2 a3 U
delete []ft;! J, Q W% Z/ j3 U0 Z2 A) z
return s;
4 S. G4 z1 L7 |# D+ k; [' h} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|