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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : - l& ?- _' s( k: S2 l' ]
include
3 v  t) i  L. q: {#include ! M7 t  O" `) x5 x, L9 `2 N. d
#include
# ?  k9 ?: ]& ?9 F( B; F#include
1 Z% G' ?7 z8 M1 M9 u$ M* w#include
' j2 Z% P& N5 Y3 T- v7 m4 @3 s) \* U  {# D6 F
char * j2f(char *s)
/ J! W) C, g# z{  p2 @3 m9 }4 g! }4 x4 a4 k
int n=strlen(s);
2 N. |/ C* y. b7 `4 ~. F( d int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);: n9 @$ o# f+ F, A' W6 ~  Z
if (!r)
' ?6 b& ]) Z; V, Y5 I3 I return NULL;
% w" y" x- g" M' b. P char *ft=new char[r+1];
2 F' \% `5 }. X8 ~; _3 Q+ p0 T& ?7 @ r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
% F: z# L& Z8 L1 l5 t# { if (r) {
* L4 L5 ~7 X; ?7 q1 n5 o ft[r]=0;6 H+ \( e- w/ {
wchar_t *pws=new wchar_t[r+1];7 `7 b: a$ j- E9 g: n6 E( }8 n4 V' E
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);' H; I/ L1 A" t& P0 U& m3 f
BOOL f=FALSE;
5 r3 n; t& C: k7 t r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
: s" z! c% {/ Q: d; s3 m8 ]- E& r ft[r1]=0;8 ~6 r+ Q2 K5 e; ^# |  X4 o7 w) P5 S
delete [] pws;6 m- E1 X) l) n+ A
}9 R, Z  p" k2 [: _9 A9 ?
strncpy(s,ft strlen(s));
+ ^- s9 _! I4 h9 @ delete []ft;/ a: \: F$ s8 f- U$ l, c+ N; S7 z% t
return s;
' r  L! i' D! g! C, R} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 09:17 , Processed in 0.018796 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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