找回密码
 注册
查看: 5184|回复: 0

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : , N. I4 m9 e: w( x6 E  R( ^, d: u
include
3 t& p7 i" R& i" S6 @1 z2 f0 \/ m#include   j5 C, H6 ~& c' ]
#include
/ e2 P  w6 ^) c2 M3 ^: Q9 t#include
: {" E! t4 f' o+ {" E3 n#include
# g+ L- B5 L; \% c6 i9 r/ Q" t
, }: `. b8 n7 F& ]char * j2f(char *s)
6 {, k/ s: ~" r4 n1 l{
, o8 q3 ^$ p/ |: ?0 y int n=strlen(s);; T; R' ?$ P+ d5 C3 G
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
; O0 O. ]4 \1 P* J if (!r)% Y. h) O$ c2 ?' q/ o; D1 o
return NULL;
9 ~+ S, q/ {. D$ D0 H& s4 r char *ft=new char[r+1];1 d$ _; U8 L. k
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来& F* K" b, r. y/ d) q' s2 R
if (r) {  @3 b) g6 t) q9 q  K
ft[r]=0;
9 u/ N" X5 s4 y" o$ { wchar_t *pws=new wchar_t[r+1];
: t( E" K5 |' Q" m( }8 S int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
& h, s- A" l! J% I0 e: S BOOL f=FALSE;
; D9 C7 l: k8 ]! e- U5 G r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
1 Z  ^2 m* D# Z- I  Q ft[r1]=0;) ], u0 c  L/ R: ?$ [
delete [] pws;
, Y* i0 Q$ s9 [0 `) J) s }/ P2 P; U: Q6 F1 m# [" z
strncpy(s,ft strlen(s));% D0 |) ^9 {. j2 a3 U
delete []ft;! J, Q  W% Z/ j3 U0 Z2 A) z
return s;
4 S. G4 z1 L7 |# D+ k; [' h} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 06:19 , Processed in 0.015583 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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