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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : 1 W) M' G, N; \. k
include
4 u& h9 ^- ?- W8 s# P#include
# ~1 X, _* _$ T5 w# e#include
+ X+ a7 q" E( e+ u' A! n7 B: h#include 0 H1 T6 }0 \5 ?* o5 J. |. Y* s
#include
8 y% z# V5 _9 Q7 z5 Z/ R$ d; o' }5 o& d8 c) ~0 d
char * j2f(char *s)1 T4 c& o+ s1 ~) W4 o) T
{
# S; c3 k' v/ N+ Y+ H+ z% ?4 v" P int n=strlen(s);0 A+ g, W$ J! @7 \
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);2 [+ \, _' g/ A& A8 k+ N0 C7 Q- l  l
if (!r)
" s0 E3 w# V! j2 R" t6 i3 e return NULL;
  S. ]% l3 o- K' t& q char *ft=new char[r+1];
: X- H9 l5 o! ]6 K7 G r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来2 W1 l: I$ p/ G. e# v. M& |+ Y
if (r) {% Q0 H+ l4 d8 L6 h7 x& w8 ]$ A
ft[r]=0;  t+ i; k( a; C* O4 s
wchar_t *pws=new wchar_t[r+1];
6 F/ A& C+ p! [: _0 n: Q int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
* s4 q  R/ s( K/ {+ } BOOL f=FALSE;4 p3 V# l" n, L3 L' }* F5 W
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
: i$ s& c0 ?2 |& t# M5 S3 V+ _/ Q ft[r1]=0;7 j; m' K4 i" a0 I8 T9 v* T5 `
delete [] pws;1 Z9 r1 T4 v* _3 W& A
}. j" c: r) s4 A! ~
strncpy(s,ft strlen(s));
7 u# L8 Y9 n. t, a  N* y8 `5 m( F9 O delete []ft;' n4 q/ X4 ]( ~  b! ]0 z( j$ ?
return s;
8 T& Y$ ~/ B# O7 j; s2 N( s2 ~} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:16 , Processed in 0.016242 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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