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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
+ V2 [$ L6 }7 y) r* o3 N4 a! N' Minclude 5 N- g1 m3 ?' T( q& _  i5 T
#include 0 |: v  d- D& H& E6 n) p8 E
#include 8 ^) g7 X6 `3 Y3 b' p
#include
. e/ K3 C  P- Y6 K1 d9 \& I5 C#include
- e! F4 n0 g* _6 I/ |8 r' K# g# T2 N+ d' S% u) V; A( L2 {
char * j2f(char *s)
9 v6 w6 ]+ r/ T* b( W. C, B{5 m+ O( \8 U$ a  C. e) F5 p2 Q
int n=strlen(s);
, b3 F$ L& c# s3 D! { int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
% Z4 H, @4 D0 S; q if (!r)
9 R6 a& G! m- ~& I% I return NULL;
% w$ r5 v4 f4 b! M5 N char *ft=new char[r+1];
4 P  s' H) ~2 J! Q' X r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
3 \4 k6 N( z1 N/ z0 m% F if (r) {
0 X; t7 E& ?1 h# l5 K. a0 a ft[r]=0;
' k: L! c( c1 @ wchar_t *pws=new wchar_t[r+1];9 a: l8 C4 _7 K
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
3 H1 g& K; V5 t. N7 ?( Y; x" [2 e BOOL f=FALSE;
9 c2 L$ j4 _3 o% \& y r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big51 X0 K- t% {; `9 M: F
ft[r1]=0;
4 ~5 o( W$ \; x8 a delete [] pws;5 t( ]9 k/ r( y; ^, v* D
}/ i2 a7 ?0 Z# M
strncpy(s,ft strlen(s));
9 [! D! a/ q7 W" e delete []ft;
( y" g; R8 p  E+ T% ^3 ^ return s;
% Y# r, X# P( q8 r} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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