找回密码
 注册
查看: 5186|回复: 0

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
; j: I- I0 R/ F' ninclude
6 k$ a3 ^. _6 c' M3 T0 q& q$ F#include * V4 y0 G$ d$ d+ V4 R5 c
#include
! A+ t# X: C$ T9 i#include 6 n; S7 w: l: U1 C+ L* Y
#include
5 [/ j7 K: m# W( V! Q3 S% i+ Y( H9 O- k$ x  [/ V+ X3 d; T6 R
char * j2f(char *s)
! ~3 r/ ^. s. X) {  Z& Q{
0 A, P$ Q9 Q4 b  C# i int n=strlen(s);
9 p4 d( ]- D0 Y2 f6 A8 j int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);5 L0 G$ X/ x4 \. m3 `  c3 u7 Q
if (!r)
6 U3 t- a/ C; c# J  b- T& `+ D) ~ return NULL;: r' d+ V1 m* ~  U  |# V
char *ft=new char[r+1];& E( [+ ~. N& |4 ]1 g) \' V
r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
3 R3 S. d. A; m+ h, _8 w/ Q if (r) {+ v0 F- u2 K$ l, t* G3 f
ft[r]=0;
* S. [5 ?7 s) Z" Q wchar_t *pws=new wchar_t[r+1];5 \* P7 }0 I+ T& ^8 y' i3 t5 r1 M
int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
1 [  G6 x7 K2 s$ \; a) o# f BOOL f=FALSE;" v2 s! {, ~6 Y3 O7 g
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5( L8 F* z, ?- y
ft[r1]=0;) `/ W, R4 y9 e/ m# S& M" a
delete [] pws;
. ^5 |% L5 h0 o4 Z0 g3 g4 X1 a }
% e! N8 u: i" m. y- B- `  ? strncpy(s,ft strlen(s));2 a& v! E; y% ]9 ?! {/ h
delete []ft;
9 n2 a/ U# k8 [1 g7 C return s;
9 {& J: `$ j0 [$ S8 U: c& q% x} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 07:54 , Processed in 0.015605 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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