|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
) `7 h8 v2 g9 A0 J: dinclude
. f+ u+ F$ l! {$ C#include
) ~7 f4 x A$ H& N |8 U) p#include & C" e' c2 i5 E" m
#include
4 d& i5 x2 e/ ]) v8 U#include
; L0 \+ u }6 b; c
6 {* D& k$ o9 F0 i9 Fchar * j2f(char *s)
% `# P# N4 @4 q: f% [5 L{
4 S! p0 L( f, \! N0 H int n=strlen(s);4 R9 l( n6 F/ c4 d
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
# Y0 w3 n* O5 z" ` o if (!r)
9 z* V- k0 }8 l2 \ return NULL;$ R) i) P5 y5 W4 _! n
char *ft=new char[r+1];
( a" i y6 {1 t4 r r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来$ t G/ u; I# b) S
if (r) {
4 V: @( t8 N4 m {- M ft[r]=0;
, ], H6 P& e7 h, ? wchar_t *pws=new wchar_t[r+1];
% J' y( F& @2 r) d9 Q! j4 _ e int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
- ^- n5 Q/ Z3 @. I% G BOOL f=FALSE;' T) I4 Z# {# T: _3 _! c' H4 ^
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5: \% E" R9 b9 |8 H0 S: h
ft[r1]=0;
' W% O( g' T5 o7 e1 B' ]# r0 A( ~ delete [] pws;" S1 B4 v' s3 _& g
}
3 S0 }5 [0 W% x strncpy(s,ft strlen(s));
; Y" N7 }! N1 | delete []ft;3 N i9 F/ t9 ^9 w6 m6 M
return s;
( e+ Z2 R# b7 O+ W; T} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|