|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : ) b" n' p' C3 e: y
include 4 Z2 L1 }; o2 k1 M# i# ^
#include 5 {7 r! \2 w0 W. ?5 ]
#include
- E% O6 }/ P/ y7 n#include
" c) O) K z7 {8 f7 e+ T#include 6 ^* e8 T& P6 D4 f; u' u
0 o1 M, F$ N5 l8 {/ N
char * j2f(char *s)
# u7 p7 ]' p+ U3 ~% B/ e& `6 r; c{
$ o' F% p6 ?9 Q0 S. @/ i6 B$ { int n=strlen(s);
0 @4 v. e8 r: ]+ \ int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);: x n& K* T$ I7 W
if (!r)
$ j+ h! _8 p; e. t8 J- M return NULL;- o$ n: p' p' r q8 h q
char *ft=new char[r+1];0 ]- k" c) _! |
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来( a: ?0 T- s$ q+ N
if (r) {
& n+ U T& K& g u9 K' [- r$ ? ft[r]=0;
3 e" {* N8 P6 H6 V* u wchar_t *pws=new wchar_t[r+1];, f5 K' ?/ x) I5 d# e% A# K
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
9 s) @9 G' ~% ~0 | j3 v) Q( I b' I+ | BOOL f=FALSE;
. S7 u7 {* f) B" g# e" V6 T, j r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5( _, n+ X1 z6 q0 `
ft[r1]=0;
7 a0 r7 a: I9 i8 T9 I( | delete [] pws;, ]! F3 w7 m0 |8 v# H
}& w* ^7 j2 _! n1 w7 W
strncpy(s,ft strlen(s));
8 }8 c: Q) J* ^( S- b delete []ft;) f; I0 W+ u# o" r/ } e* A% E
return s; # Z( ^0 ~1 o$ w5 @8 q6 e
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|