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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
9 x$ z# g" T8 ^( `3 p2 h- _4 binclude " `- O' n+ w0 L8 T) ?7 `
#include 8 Q- P' N1 |/ P# v
#include 9 s8 C* j9 ~0 X# i* L" N) f
#include ( X$ \8 p0 Q/ G' Y/ D$ ^$ X9 W" p
#include ! M# \$ u5 R- K' N
1 i: ^9 n6 e* J+ z0 c! \
char * j2f(char *s)
  q2 P7 W! d7 P, Z{
( _# i4 Z$ m. ~4 N! F int n=strlen(s);+ p- g1 C5 T3 W
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);5 {. X* K0 g1 D
if (!r)
2 G2 H5 J5 p; S% d! O% _# Z( j1 Y% F return NULL;" ^5 T9 X* ~( ~
char *ft=new char[r+1];" c) n% q8 z2 \' w! }" C) B% }
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来' |" j( X( W9 s
if (r) {
+ ~' I1 ?  ?0 g" J1 x* ] ft[r]=0;
% R- ^# T+ Z# q4 r) S wchar_t *pws=new wchar_t[r+1];
8 J& @- B& v6 ^  {& | int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);% I; ~1 B9 q: i
BOOL f=FALSE;
! V/ Y* m) _  p" Q: h r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
9 k8 d" X: |5 f! Y( X1 V( I ft[r1]=0;- A* I! B3 P, b. }2 L1 i
delete [] pws;
  B' a# `8 P  H8 {' _# i }! W! L8 e9 L4 F% G
strncpy(s,ft strlen(s));) F  l% B7 y2 I  H! S
delete []ft;# {/ b# }1 m! _: n# H: ^8 ~
return s;
9 d* ?. T; y! i- ~. w! @: W} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 16:27 , Processed in 0.019551 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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