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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : ( \6 ]0 @: m" v  Q1 C
include
/ b5 F) a9 S+ R' u' o! V+ c#include
+ y3 T% y' A( h& x3 j#include / q3 B& }  v0 K" H* c9 C! B
#include
. a1 U* D6 p* ]#include + ]9 m1 x& A5 w+ Z

# J, A9 v% Q9 [  _; D/ d4 Xchar * j2f(char *s)
: O8 I  A1 C) Y, R3 P6 E{
) N1 P3 J! v! [ int n=strlen(s);1 N8 J0 s! ~2 F3 s" b9 u$ D
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);! A/ a! J2 G) z$ G
if (!r)
! z4 {$ J5 B" n1 J return NULL;
8 u1 ]4 j( |; q) M( Z/ n char *ft=new char[r+1];
1 l( z2 i4 J3 x& z' J r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来( m) q9 z. w3 Q% B
if (r) {  T' X8 [& c+ l6 @) Z& I" ?
ft[r]=0;3 V9 ?% V4 U! [' h. K8 A
wchar_t *pws=new wchar_t[r+1];
0 t/ W/ I0 d, g' |! ] int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);8 O' U$ h* g: Z+ U( f
BOOL f=FALSE;
0 Z0 p3 C7 Q* o- V! p* \ r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
4 C$ c: _' l1 k3 t3 U3 V ft[r1]=0;
4 Q. A! h' S. w: Q# B% e8 m" s: O, f& O delete [] pws;; s5 c2 L% e  J1 U3 _
}8 |. R( v3 @- F4 @) q+ C
strncpy(s,ft strlen(s));+ ?0 r2 B' I. ]: [8 L! d
delete []ft;
0 L7 w% P( Q$ k/ `8 [! R1 R% d return s;
" u) L1 b# C! z2 u/ ], u} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 01:31 , Processed in 0.017780 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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