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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A : , n4 V2 M5 w& f# V4 r
include 2 c" \/ H7 Y" w0 [% d+ J4 C- _
#include % k: x5 N7 q0 {: r( [( L4 l
#include
% l; r) }0 u: _$ r  j! K#include
% h: e. z% [& {2 ]% K" q* [( ^+ k#include 1 ^$ H1 m5 z$ N/ M" g6 S6 {. V
- Q' g9 o- c2 z
char * j2f(char *s)
( R" D4 \6 ^' X: K9 E- Q{
& I/ H" L  e! Q+ Z- w int n=strlen(s);% O( `" N4 `* j( j, _. _
int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);, H6 S; c0 U, Y! G0 _$ S% q" _/ Z
if (!r)& q  p$ y, P3 P& \# M( B6 |0 ]
return NULL;
7 n; o1 k( d4 s char *ft=new char[r+1];* c& c5 ^  }$ s9 }! w8 `
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来% m) I0 I8 \0 q" |
if (r) {
# C" _' ?+ m5 G3 K ft[r]=0;7 B4 e1 }! ]7 h" ^
wchar_t *pws=new wchar_t[r+1];
  Q3 Y3 E3 j' X3 M; K int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);, p0 Z, {% z9 [) t0 ?/ k! e1 n
BOOL f=FALSE;' A6 l6 X8 w/ z
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
6 v* g- `: V5 v2 W ft[r1]=0;
8 a* h1 ^) ]2 q- T# U3 S# K4 N delete [] pws;3 q) {3 P2 X7 ~4 f3 t
}( r) C. r+ K+ A4 O& c
strncpy(s,ft strlen(s));  d6 w4 _* o- N4 K. t+ }: Z' \
delete []ft;+ q$ Q2 Y: k. N7 ^/ ?
return s;
+ |1 j4 K9 i9 W7 p1 _6 x4 u} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 11:03 , Processed in 0.034580 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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