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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
0 {9 w2 h) ?0 F8 V2 s; [, U# Dinclude
1 [: y6 n1 Y+ x0 j#include , j, [: a  g1 v
#include & [8 u. ?6 R) S0 k' b: f
#include , Q& C; C# s- p
#include
, |! H& x7 O% b6 _% _% [4 G" p
* r% z  Q3 N( j+ O  jchar * j2f(char *s)) O, Z1 K# v% `: f" {9 d
{; z8 b- ]1 @2 @9 X
int n=strlen(s);& O: b" p: I+ ]; X$ {
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
+ W& U# y1 P* k; q if (!r)* j$ K6 @. j- e; X
return NULL;
+ B+ b! c3 v  o& d" ^ char *ft=new char[r+1];4 o. I% @8 r: W% P/ k( z
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来( r! F( z3 I, f6 a1 R1 G5 P
if (r) {
- }9 M( G7 d; k! s$ d ft[r]=0;1 n$ w! Z* k" J4 Q$ ~' I
wchar_t *pws=new wchar_t[r+1];
; K/ B) Y4 G2 f3 J* _0 e int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);5 R9 k6 w$ e: g( D1 C! R  j7 [
BOOL f=FALSE;
0 Q7 t# C6 R7 G: u: _: [( T% s r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
/ Z, F7 H; ?0 k, q4 \" z ft[r1]=0;
& N* c" P0 l8 T6 T8 _, q2 c delete [] pws;9 }% \, f3 A1 ]* b; w
}$ D% e( a: e# b* E2 |
strncpy(s,ft strlen(s));  T2 v1 T9 [. P- Q, r
delete []ft;# K" `% ]$ K$ [
return s; " l, T  z8 ~6 E( B0 Q2 w2 l9 m
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 01:41 , Processed in 0.018223 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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