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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
/ y' l2 b# U) ?- a6 _  Z7 O6 Jinclude
  T+ W2 d0 C7 t+ U0 c#include
& o1 o0 g4 C2 Y" g& m+ ^# W9 O#include 5 X4 y. I% y) e2 y
#include ' E7 m) I6 _+ G& W
#include
/ N6 s  f4 F* Y6 q
0 ^; X9 `4 W& Z; H. X/ O) ?2 D4 ?7 gchar * j2f(char *s)
9 j3 i& R% ~& Y# D5 F. V2 s% I: I- G{
: O  }3 F' t  \0 O( o int n=strlen(s);
6 ?. v) p/ ~7 G; L" g int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
+ j$ c4 A0 C2 L- \+ }( C5 O% W if (!r)! S  b7 k, l3 ]. @( ~3 S2 [0 L9 F
return NULL;
, c( L9 w+ ^' z& A8 h8 @, n$ Q, @ char *ft=new char[r+1];& D9 U; F- {0 \0 N8 E
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来5 \, S" I7 n& V1 A" M: {3 h
if (r) {
5 o7 ~2 H7 Y4 b. C: q; w0 C ft[r]=0;7 c0 i2 N7 t2 X$ U/ y
wchar_t *pws=new wchar_t[r+1];
9 n2 a% u; _8 S/ D/ }+ R  Y; A( a int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
) o# y" a5 }& i, A0 B% e, [& @ BOOL f=FALSE;2 k/ ^8 s: W2 N" `1 K3 [/ ]4 ^
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big57 s. Q7 L. ^9 ^: ~4 F2 }
ft[r1]=0;& p  T: u4 J. |/ d8 H/ `. M6 M
delete [] pws;
! h9 Z3 O4 ?+ w1 w4 f0 E }
5 y) v0 a) w, F, e strncpy(s,ft strlen(s));
: u0 A1 U) ?- v. ? delete []ft;
6 i' @3 A' G% o- _4 @* m return s;
  ~2 `2 ]: {1 M; m+ X  V} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 08:55 , Processed in 0.019374 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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