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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
' B4 A/ D" x1 C  i: Rinclude # h  z! F. |. e) W7 |! ?- q
#include ) E3 F8 o) @% j# B% x: ^/ n
#include 1 {' R+ b* n0 N9 A$ L+ v2 v
#include 6 i# z" C/ J; A6 x) `
#include
! m# m/ N8 y, l7 V; h: h$ F- K
/ \, z. R. L- Nchar * j2f(char *s)
6 `  `' [7 `* P+ L{
; h6 f6 ?6 W; ~/ ~" K5 e int n=strlen(s);8 j! h) A' Z' p7 c7 A& d/ e# S
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
7 n+ L) i. g7 _, ^  a if (!r)4 a9 Y7 F; }, i7 L8 B% {! g- J, x, ^
return NULL;
0 Y, [9 d: v7 @1 h char *ft=new char[r+1];
) O  J1 N% [( P. u$ D( U r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来' o& a* w3 \4 M
if (r) {
2 g7 J% l0 U' Y4 P6 F6 f$ l- r- Y9 j ft[r]=0;5 e/ C. D) l7 ]& l" @+ ^% r; V4 h
wchar_t *pws=new wchar_t[r+1];
% F3 ?2 x& j* A3 R$ F- L, H& T int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);1 L# [' w7 Z) {/ ]
BOOL f=FALSE;5 G' ]# C/ |% l' x* d. t
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big58 z9 p/ l5 c/ }  {2 |
ft[r1]=0;
( n2 N& x9 A; _7 c; |( J$ p: D8 ] delete [] pws;  P1 A# e& @7 ~* J7 x3 R# Q
}( u$ M! L1 v* s( n7 Z% S9 Q
strncpy(s,ft strlen(s));
% Y' V$ v6 {, Q% g! x8 \" b delete []ft;
  a/ ?" k4 Q) C9 t% v return s; ) s7 z$ i, y3 d1 v3 x
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 04:38 , Processed in 0.014507 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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