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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
; V% b' U5 `0 D4 L( sinclude & m% y7 D' o1 B0 u9 G9 ]- }5 ?, t) U" ]
#include ) ~6 x8 Y# N! T$ _4 v7 ~. P
#include
+ g- o* P; B- o0 P# s: v! i! n#include
: X( @* I% n; [; i7 c#include , \3 X, E. e4 I6 Z3 @; e
1 A4 z2 ^& a! A, i8 X  [/ @( w
char * j2f(char *s)
$ X5 h7 Y. C% }$ w$ F5 R& X{
% ?3 T8 W0 Z' E int n=strlen(s);
8 D+ ~* P" `+ f3 B3 k6 ]# |/ a  Z0 b int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);, M# Y+ q  |2 T2 d
if (!r)0 w  u6 K" u, E4 a! Y
return NULL;( w& _6 I4 q' ]7 A
char *ft=new char[r+1];
- V# X/ C3 z0 x+ F( Q r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
! U) P. r. F( x! L if (r) {: x; I. n4 Z4 X4 x: T4 M
ft[r]=0;- Y# |( D8 z& [
wchar_t *pws=new wchar_t[r+1];' G4 [$ C" r2 H$ X5 i* Y. {; i
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
0 ~5 ?# K9 g) l BOOL f=FALSE;* C( h3 `0 i! n- b$ {+ ~
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5* `7 m* [. p) k2 B) W- [2 v
ft[r1]=0;1 m& t8 O, W" Q# C4 T
delete [] pws;' d4 P( a( {- j0 V% {7 b1 I- w
}
& F+ E8 V" B' _3 F6 q3 l strncpy(s,ft strlen(s));
9 ~( H- y: ~$ S8 K3 `8 T" x7 b delete []ft;
9 m5 O2 c: J8 x. Q$ M, _ return s; 2 D) j5 Z' S6 ^- E6 r6 ~4 B2 W
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 13:13 , Processed in 0.037226 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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