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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : 0 A6 ^; K% G" @/ _( d
include 7 S3 q8 T: M# W% y% A& h* \
#include $ B0 \, U2 A3 _( S7 h
#include - m: ?$ G2 R' R3 i; F% Y
#include
6 D2 b8 O# q. F' r) j+ d( G#include : c. O$ U: o$ ~
. D4 g1 j; X' n9 X/ w
char * j2f(char *s)% r/ y& d( Q0 A' n1 C% Z5 ~/ D
{
' x- z- d% s0 x int n=strlen(s);! r+ [, C5 l. i$ V
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);* M3 G6 X* l& L
if (!r)7 o* \1 P# ^5 s" q( m1 \
return NULL;! f: R% Y: `6 v
char *ft=new char[r+1];
0 p/ N$ k1 G. B) W" D; m% N1 j r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来$ W6 Q8 O. @( x1 u9 n! S# j* E
if (r) {* X" A/ A- n# T/ W( V. P% t$ Q
ft[r]=0;( E7 u! g& k# m) q/ G. D
wchar_t *pws=new wchar_t[r+1];
, T+ e# E1 }% q4 T( A int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);8 l" y% E" m$ `
BOOL f=FALSE;: q; n4 B$ g5 t- Q: x/ i5 z
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big50 }8 d2 P% y6 h- V
ft[r1]=0;) y/ U: C: `" @* T. u- C
delete [] pws;* Q5 Q. N  u* @
}" n) X5 c# H3 P6 `: t( j
strncpy(s,ft strlen(s));
* t7 j" \, B6 w3 f9 l delete []ft;7 ?1 _% ^0 X7 N$ Y; v; q+ ~2 @
return s; & l" o0 N8 N, U
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 23:43 , Processed in 0.019149 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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