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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : ' Y' ]; Z# w* X" f$ K1 u
include
2 F) Z7 g" w* [2 F  i! M8 }#include , o. H* w# `& S; ]
#include 1 ?) e$ z$ N  e
#include
8 {( ~1 ?- b5 E( O#include
, j! m; X3 A. p7 Y0 w7 e5 q' ^- h* v$ l5 b, V: o
char * j2f(char *s)# J- M" b6 @& ?6 w3 N) b# ^4 C" n  w
{
" f4 ^. I8 x; R! m# L- f: } int n=strlen(s);# K7 s- V, @6 d( @- l9 R
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
* |7 T- }+ }" ]$ _0 f0 [0 Y' | if (!r)
6 C) z: U6 u/ M  o: C% f  D- d  D return NULL;1 A# J& P, z- F4 P; c  |, c
char *ft=new char[r+1];; u- k+ e9 s) L$ W3 x
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来8 \- \  {: B, D( F8 f' |! ^- I" D4 I
if (r) {
. c7 Q" @* B( p% U9 P ft[r]=0;# O; S5 g, E" h  }: b( `
wchar_t *pws=new wchar_t[r+1];
0 L- z: |2 N) s0 U+ @2 h int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);7 G' H" c+ z8 D" ?8 ~/ H! V
BOOL f=FALSE;
# P: ~) `3 H  l2 e r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big53 T! J/ z8 m# F) `5 O
ft[r1]=0;+ Y# ?( u+ w9 O1 f
delete [] pws;
$ p% V) Y0 R7 |$ Q6 I }3 @; B  |( d7 T# }
strncpy(s,ft strlen(s));
) U; l+ l8 K- @' ~  ]6 [' D delete []ft;
( V2 V! R# L! R return s; 4 K8 F4 i( {' r  I8 i  m
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 08:57 , Processed in 0.017714 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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