找回密码
 注册
搜索
查看: 4922|回复: 0

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : 0 ^5 I; u+ W6 m+ v
include 6 l- a+ b- o, K9 Q
#include
1 W- U  g* G# t# W7 B9 f#include
5 O8 s& S; q7 {* l3 M0 j#include
. A% p/ B6 Q& L. e: G#include   d- I% W$ l7 e) Q' Q/ d; G

+ ]4 J1 y7 T. e/ i3 @char * j2f(char *s)
" h/ ~$ A5 {, d3 j{& f) ^$ J+ k% z
int n=strlen(s);1 O$ m5 R" i% b9 X6 O7 Y
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
( A% |  {7 G+ N% @  y; _ if (!r)
5 ]) @; W% g6 D7 o2 u/ C; ] return NULL;
. K4 P9 e% N# i% t  k- [3 w1 j char *ft=new char[r+1];2 [9 d& G/ Y+ v2 p) e% I6 z
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
8 ^# h; v0 g. W2 y if (r) {
: k' _6 `/ K* R# E8 n- D ft[r]=0;% U4 T: C# w% c. Y! y" k
wchar_t *pws=new wchar_t[r+1];! |% ~. e9 [% o; L; N
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);" T4 `4 g8 u8 Y5 o7 @7 f" Z. D
BOOL f=FALSE;) Z1 Z$ M9 }* m: a- R! J# d
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5+ K8 ^' k6 J, R0 `3 w# k
ft[r1]=0;. G( ]9 ]. D7 y2 T0 E
delete [] pws;& f0 U# a: g" u6 f
}, `$ O8 p3 A2 S. C# m8 z& |
strncpy(s,ft strlen(s));
6 A6 t/ Q4 y' Q3 m1 ^ delete []ft;. T0 e3 i+ i) a, y# B5 e1 `$ W
return s; , [* Z4 M+ S2 c, H% w& p
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-12-29 20:02 , Processed in 0.019031 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表