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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : 5 B* v2 T- h# U' @' P: R! T
include ( F& H" k2 }9 h  Z* _# }
#include
2 p6 h. V: x7 N3 [' E: l4 {. K#include ) I' Y4 D* N  Y4 Q8 _  S* u: D
#include & i7 C' C: }( V* [7 |# L% e
#include
5 a% U/ {5 B6 [2 R3 z2 {
6 ?: o) s( T9 ~; ~+ @* Ychar * j2f(char *s)
, z# H3 n; X$ i( g8 R# r" I# h' L{8 H  m  I4 c; |6 ]6 Q8 V
int n=strlen(s);  L: O) S: K. `7 W
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
+ F/ x3 c8 A$ t6 b1 p1 I if (!r)# C/ Y; ?/ z# p: O
return NULL;
6 T4 M! d7 Q+ v5 }. C char *ft=new char[r+1];
& r4 `( w, C! C, P- A" [/ r r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来0 k6 O2 O* f% N
if (r) {; X8 ?4 F: A7 T. t
ft[r]=0;
# L8 R5 C2 \) I; d( V$ x* b- u wchar_t *pws=new wchar_t[r+1];* U3 u4 O' \8 F, R$ }5 f$ A
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);* G2 o" C( \( y$ r
BOOL f=FALSE;
& f8 ]! S, _4 l5 o% n( | r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
% }* T( l3 Q3 e5 U2 w+ Y ft[r1]=0;
' `. W% t' b; }& G4 [# }& n7 c4 n delete [] pws;/ A. t* s3 Y: D0 m( u
}
$ }5 |) e4 \  i strncpy(s,ft strlen(s));
5 {6 z3 V# v3 n4 S9 U delete []ft;
8 a8 \8 E0 e; g5 m2 S$ r" g% I$ a. x return s; 3 p! Y/ K0 \2 g4 \
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 15:07 , Processed in 0.017741 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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