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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : / m4 \. z. o' F  z: z5 F
include ! Q7 o) M; \5 W
#include
4 k; z/ V, A' ?0 g( ]  ?#include
" F* z, D. _+ K, V8 N4 z6 j1 }% ~/ S#include : z2 W2 z9 l/ _" o# r) `
#include
/ c8 T' v5 J$ b( x; M1 N5 @; P6 V/ o; c8 q: f" E/ U) z
char * j2f(char *s)4 e0 x3 X* `, {8 i( x1 F
{
5 F" c+ L7 L3 O% k4 j. d7 G int n=strlen(s);; k$ R% K! j8 R, i6 P- L3 V
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
7 i# ]7 Z6 K- Z, v, z) v if (!r)+ ~& H  ?6 k0 w  H, f% r2 B
return NULL;  J6 H8 |$ c# a% n: D
char *ft=new char[r+1];
* v; Q8 u( C9 C6 k r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来& F: [5 f9 g% G9 e/ Y. P6 X
if (r) {
) T7 w# n% h/ b6 j) C$ s ft[r]=0;
2 C, {1 Q* S$ h; m, _* q5 X wchar_t *pws=new wchar_t[r+1];
3 A& q7 ]. B2 {4 X7 {1 H int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);  O- [7 [/ a. n; Q  S& [  O
BOOL f=FALSE;
7 C( b, e, S0 K5 V$ Z+ C r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big58 O+ ~1 s  r8 L% S- O& M% Z
ft[r1]=0;9 z) S! k) p- v3 l8 F( u1 Y
delete [] pws;! Z9 }; u1 K' Z7 D! R9 U
}
$ T# ], D( q$ b: c/ W5 ], g strncpy(s,ft strlen(s));2 V/ e. H. n  v$ m+ x- k8 {
delete []ft;' W# q$ y  Y9 V, q! U" g- u: l
return s; ( M3 e0 R7 ~9 E- l) h9 ?" Y
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:51 , Processed in 0.020220 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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