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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
* u5 r$ U6 o# _( xinclude
- n: T: H8 Q& b8 ^- |#include   X8 x3 O. x6 A. K9 Y$ w. l) M5 J
#include " I: Z. {  b' q* y$ E
#include
' Y' \& `5 n- h( Z$ I0 U$ D" ~" m#include & T  H! w# N8 K+ W0 N% o

8 T" [% f- ~; Qchar * j2f(char *s)/ K( g: y0 z" a+ x# q$ i$ w
{
/ b3 N  A& g6 _. b9 W6 m& W int n=strlen(s);) P) e" q' {5 f$ U2 F6 L4 }, {5 z$ R$ V
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
% h* f2 {; b, y1 |0 E- ? if (!r)3 X6 Q8 c/ |  ?$ q* z& u$ }- y5 z2 R1 w
return NULL;, q  p( M8 P. G' U* x
char *ft=new char[r+1];
2 C; g: f$ g7 @# E' M' C" w; F r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来8 x6 }' `" d: O9 |9 Q3 `) W, B/ a
if (r) {& m. R8 `) n* _# G: \% P
ft[r]=0;
- A/ {! z5 A, ?. e/ h wchar_t *pws=new wchar_t[r+1];& D; m! f3 {4 h  R+ U# |; X
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
( T& M- y! s9 \ BOOL f=FALSE;
6 S* @( S. w5 I' Y# Y$ K0 i r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
* K6 F. d( k& q" O: G ft[r1]=0;
$ V5 O7 V0 l; U% J: x8 N delete [] pws;
  e+ M" h' F: L; Z7 t }; G0 C. p; y, I' [9 n4 l
strncpy(s,ft strlen(s));
) ]/ T: b( w1 i- Q6 W delete []ft;
/ M1 u' h' C3 {/ c  @8 t# h return s;
' a, l; v4 ~3 f- z' i} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 09:28 , Processed in 0.014179 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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