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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
; e  W) f; W7 K1 \include
7 c; m' Z  M( o: k8 t#include   }# [3 S5 k: `4 y  f
#include
$ t' S2 o  b6 L  u#include
2 X9 L6 {* l) y; `8 n" D9 c' _$ y% c#include 1 N( Z+ A) W% r
* W3 @% L3 E/ T& i# w( A$ h
char * j2f(char *s)
) m' D9 j5 e0 H( F{% S- q9 V1 V, M9 B- w3 l
int n=strlen(s);
) t3 v2 M, b5 q$ I* E# p int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
% d$ N; o3 T& Q1 V1 `* G if (!r)
$ g# a7 y( k6 |( ~& T; x! Y return NULL;
) F8 F7 }- W% I8 q) U char *ft=new char[r+1];  C+ n+ U# @- a* v
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
. z) O. K+ u* I  ? if (r) {
) C" F4 @8 Y1 W( M' a/ M ft[r]=0;; ?- W( a7 D- }. i& p7 z
wchar_t *pws=new wchar_t[r+1];9 ?2 r. X+ V3 p0 H# U8 `5 j' }% V. N
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
- U% |% @% P- I8 } BOOL f=FALSE;
6 ]9 T  ~# \) U  d  ? r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
% Q# [- y+ C. j( \& m0 ]3 U ft[r1]=0;4 F' n2 O; \3 ~8 |* ^! h
delete [] pws;
+ Y$ {! o( Q6 n, }6 g0 R  V }  X+ ~* Z$ p* t2 \
strncpy(s,ft strlen(s));
4 O5 _* Z; H/ s  A delete []ft;  n& {9 L1 g  {
return s; 9 n5 E# g+ P7 J6 L
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 11:48 , Processed in 0.021280 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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