|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : , C# e' |( E, Y* w4 _
include
) d3 v. c% m. J, v2 s& p. u#include 0 ~: X q$ l7 J4 {# }6 t
#include
5 N, l8 E) C1 I( V3 p#include 2 H' h- D' L" y1 y
#include
* X" E4 v" f8 Z# T9 q: R
+ y# @- `# o! g+ ichar * j2f(char *s) {) e' U6 k& J: \
{8 y/ S! ?& P$ \" C- Q6 `9 t
int n=strlen(s);% P o2 ~" I% k$ R
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);7 M. s( h3 J8 w
if (!r)$ `2 N3 |2 i5 V" c
return NULL;! S* |2 L5 ~3 A8 {
char *ft=new char[r+1];
$ U$ _2 _) p4 _. L r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
+ Q5 K0 s7 v9 C; a4 O9 A* F if (r) {
/ o/ e% o3 K: A* \ ft[r]=0;
5 Z2 A# |. K( O W2 t# ?9 o wchar_t *pws=new wchar_t[r+1];0 Q' a3 y1 ~- s! a5 Y
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
1 P( B6 t3 {0 v' |( b, |" @ BOOL f=FALSE;) b& p, p, z; |2 a* ~
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
- E0 X) A, S% _" e8 v! j ft[r1]=0;0 P& a& R I/ ~. }# P. M7 I
delete [] pws;, u1 a, }7 u; y) Y Q
}- [5 v U# P2 i" w
strncpy(s,ft strlen(s));- Y' j4 _+ f$ \" s+ F% E- |
delete []ft;
6 Z V9 I6 O- z1 E" L- s return s;
' d% N" f/ b4 p' R9 d} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|