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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
7 _8 J+ j# g/ C" k0 pinclude
  v2 S/ s3 k+ G( q#include ( _; T2 |, d: t7 D0 C
#include 8 W, j/ \0 e* {7 k* i
#include 1 A) l8 O. X: x0 J' ^. f7 ?# G% P
#include
+ A: V$ i8 K( x6 `
; X# M% u/ B0 Tchar * j2f(char *s)5 Z+ q3 \, {: B+ n( A5 x
{9 W9 }. u9 Q- ^1 i8 M1 `
int n=strlen(s);
& J  k) R% B3 W; Y; Z. \ int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);; ]6 E# C( K6 s, h9 B) S) y! W
if (!r)
- {, C) \, q! r return NULL;
4 r& P+ H' a! F7 q& D" b char *ft=new char[r+1];$ X5 e/ H' x0 w; X
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来: |! |' s( @! L) x* O1 [* J
if (r) {
# O7 t. k! C! C" m' O, Z) y/ g, r( I ft[r]=0;
2 n" L: ?" e, Z+ m- P: J2 A wchar_t *pws=new wchar_t[r+1];  L2 Q# U' N5 b! c2 g$ ~
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);1 X& \, _  ]. H2 Y
BOOL f=FALSE;
( x5 I& G' ^" _) V! J r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
$ L9 P7 R, a- n. m+ }8 Z6 T ft[r1]=0;
/ x" {8 e  G$ H  C( I, b delete [] pws;; Q# M7 k3 R. A8 Q' R$ h1 M
}
- ~: ^% x1 `2 O  L strncpy(s,ft strlen(s));4 h2 o* r1 i/ T
delete []ft;
9 z/ K+ h: H  y return s; $ R3 Y# E9 j, F. p( o5 e
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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