|
|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : ' Y' ]; Z# w* X" f$ K1 u
include
2 F) Z7 g" w* [2 F i! M8 }#include , o. H* w# `& S; ]
#include 1 ?) e$ z$ N e
#include
8 {( ~1 ?- b5 E( O#include
, j! m; X3 A. p7 Y0 w7 e5 q' ^- h* v$ l5 b, V: o
char * j2f(char *s)# J- M" b6 @& ?6 w3 N) b# ^4 C" n w
{
" f4 ^. I8 x; R! m# L- f: } int n=strlen(s);# K7 s- V, @6 d( @- l9 R
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
* |7 T- }+ }" ]$ _0 f0 [0 Y' | if (!r)
6 C) z: U6 u/ M o: C% f D- d D return NULL;1 A# J& P, z- F4 P; c |, c
char *ft=new char[r+1];; u- k+ e9 s) L$ W3 x
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来8 \- \ {: B, D( F8 f' |! ^- I" D4 I
if (r) {
. c7 Q" @* B( p% U9 P ft[r]=0;# O; S5 g, E" h }: b( `
wchar_t *pws=new wchar_t[r+1];
0 L- z: |2 N) s0 U+ @2 h int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);7 G' H" c+ z8 D" ?8 ~/ H! V
BOOL f=FALSE;
# P: ~) `3 H l2 e r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big53 T! J/ z8 m# F) `5 O
ft[r1]=0;+ Y# ?( u+ w9 O1 f
delete [] pws;
$ p% V) Y0 R7 |$ Q6 I }3 @; B |( d7 T# }
strncpy(s,ft strlen(s));
) U; l+ l8 K- @' ~ ]6 [' D delete []ft;
( V2 V! R# L! R return s; 4 K8 F4 i( {' r I8 i m
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|