|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
* u5 r$ U6 o# _( xinclude
- n: T: H8 Q& b8 ^- |#include X8 x3 O. x6 A. K9 Y$ w. l) M5 J
#include " I: Z. { b' q* y$ E
#include
' Y' \& `5 n- h( Z$ I0 U$ D" ~" m#include & T H! w# N8 K+ W0 N% o
8 T" [% f- ~; Qchar * j2f(char *s)/ K( g: y0 z" a+ x# q$ i$ w
{
/ b3 N A& g6 _. b9 W6 m& W int n=strlen(s);) P) e" q' {5 f$ U2 F6 L4 }, {5 z$ R$ V
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
% h* f2 {; b, y1 |0 E- ? if (!r)3 X6 Q8 c/ | ?$ q* z& u$ }- y5 z2 R1 w
return NULL;, q p( M8 P. G' U* x
char *ft=new char[r+1];
2 C; g: f$ g7 @# E' M' C" w; F r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来8 x6 }' `" d: O9 |9 Q3 `) W, B/ a
if (r) {& m. R8 `) n* _# G: \% P
ft[r]=0;
- A/ {! z5 A, ?. e/ h wchar_t *pws=new wchar_t[r+1];& D; m! f3 {4 h R+ U# |; X
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
( T& M- y! s9 \ BOOL f=FALSE;
6 S* @( S. w5 I' Y# Y$ K0 i r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
* K6 F. d( k& q" O: G ft[r1]=0;
$ V5 O7 V0 l; U% J: x8 N delete [] pws;
e+ M" h' F: L; Z7 t }; G0 C. p; y, I' [9 n4 l
strncpy(s,ft strlen(s));
) ]/ T: b( w1 i- Q6 W delete []ft;
/ M1 u' h' C3 {/ c @8 t# h return s;
' a, l; v4 ~3 f- z' i} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|