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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
3 M: |/ |" y0 W" f7 ~include 1 s# G  J* m% K+ I. `
#include % T3 ]% V# h% h6 {: ~1 f( J6 a
#include 3 W* c& b9 ~8 Z' [7 Q3 @3 s
#include
* d8 t* ^4 C7 j8 Z1 d#include
2 r, E: u7 l, Z+ P3 M
+ [  ]7 Y/ [% E5 W9 Nchar * j2f(char *s)
$ x/ z  o; v: F/ d) O: t/ D+ f{
. M# J, v3 G: L int n=strlen(s);* a8 M( @- F9 V+ k. s: D
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);; H" i% W& G4 E8 A
if (!r): s5 H# ~" i; v0 k" l! }) W2 k
return NULL;* B+ M! e4 E# t
char *ft=new char[r+1];! [8 u, J6 x9 W! v8 g
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来- t3 Q5 r! }" I7 u7 o, F
if (r) {
' g8 v) ?! G- T; w( f- I) R3 v' e ft[r]=0;
7 i/ c8 i% a7 \5 l* ~ wchar_t *pws=new wchar_t[r+1];1 e7 b  {+ B( c$ @
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);8 E9 j' ?, C" m9 \, w
BOOL f=FALSE;
3 Z$ ~0 \6 |' b6 K$ J0 @ r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
8 p/ d$ u5 s8 @ ft[r1]=0;
7 e4 H* B1 f" |' ? delete [] pws;
0 F- e, O9 r7 U9 u4 k' r }, p) `" X  ~) l0 a5 @6 A) @
strncpy(s,ft strlen(s));
! G2 ^' @( I% y0 G" a( t' a* N delete []ft;. ]" h7 u$ D! O- w' x
return s; % H# L( b" b) k$ ?5 u2 R/ A0 E1 w: N) {
} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 11:07 , Processed in 0.017789 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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