|
|
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
; e W) f; W7 K1 \include
7 c; m' Z M( o: k8 t#include }# [3 S5 k: `4 y f
#include
$ t' S2 o b6 L u#include
2 X9 L6 {* l) y; `8 n" D9 c' _$ y% c#include 1 N( Z+ A) W% r
* W3 @% L3 E/ T& i# w( A$ h
char * j2f(char *s)
) m' D9 j5 e0 H( F{% S- q9 V1 V, M9 B- w3 l
int n=strlen(s);
) t3 v2 M, b5 q$ I* E# p int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
% d$ N; o3 T& Q1 V1 `* G if (!r)
$ g# a7 y( k6 |( ~& T; x! Y return NULL;
) F8 F7 }- W% I8 q) U char *ft=new char[r+1]; C+ n+ U# @- a* v
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
. z) O. K+ u* I ? if (r) {
) C" F4 @8 Y1 W( M' a/ M ft[r]=0;; ?- W( a7 D- }. i& p7 z
wchar_t *pws=new wchar_t[r+1];9 ?2 r. X+ V3 p0 H# U8 `5 j' }% V. N
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
- U% |% @% P- I8 } BOOL f=FALSE;
6 ]9 T ~# \) U d ? r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
% Q# [- y+ C. j( \& m0 ]3 U ft[r1]=0;4 F' n2 O; \3 ~8 |* ^! h
delete [] pws;
+ Y$ {! o( Q6 n, }6 g0 R V } X+ ~* Z$ p* t2 \
strncpy(s,ft strlen(s));
4 O5 _* Z; H/ s A delete []ft; n& {9 L1 g {
return s; 9 n5 E# g+ P7 J6 L
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。 |
|