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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : ) k3 B/ }, k! v
include 9 M1 X8 L) z% _) B: K0 e* M
#include : U6 F' R2 r% L- l) I( B
#include
. h, o6 y7 @; m$ y5 I" G6 ~  I. j#include 8 f. A2 \! n7 K, T! H* \
#include # t/ ~" T, s& V6 Q! b2 ^! t( o

3 w1 D  D! C3 X/ A5 ochar * j2f(char *s)
/ B3 R  |5 ?* O! C4 }; t- |9 w{
, o' f  h: _8 v' n& q4 h: T int n=strlen(s);
3 r1 Z# @1 A4 M, d% A int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
: ^8 e  u) [. q4 k* ` if (!r)
/ u% o' Q9 f* A& s return NULL;( H: s( g/ I4 C. J
char *ft=new char[r+1];
! j0 S$ `+ j! a/ u' }! A! N r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来, W* L' z: U! H! b) I
if (r) {2 K$ i1 c7 N( b5 [8 M8 z7 R
ft[r]=0;
; G9 o5 L4 c) ~. p: X, i wchar_t *pws=new wchar_t[r+1];! f- L- d; Q: [5 `; B
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);: i6 z2 Y& N$ Q4 o
BOOL f=FALSE;/ s5 l. M' z3 B- E: W
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
% w* v( [+ r( |( K ft[r1]=0;/ O4 \$ L1 t3 V- [7 ]& `
delete [] pws;
) h4 `& G# h+ X. q) H; c }
5 V% C+ k& n3 ?/ j6 N2 r strncpy(s,ft strlen(s));
. N: t8 B( Q* O5 y: i( z delete []ft;$ R9 c; C4 k$ {/ {/ |
return s; ; j# _4 T) R, k- a/ ?" }
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 10:12 , Processed in 0.019240 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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