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

繁简转换

[复制链接]
发表于 2004-3-1 23:14:41 | 显示全部楼层 |阅读模式
利用Windows系统自带的简繁体转换的代码,效率较高,能够很好的完成GB2312、GBK到BIG5的转换 主要解答者: taogx 提交人: taogx 感谢: taogx 审核者: flyelf 论坛对应贴子: 查看 A :
3 ^2 C! H6 G! Y( y' rinclude
. k6 A9 `/ Y) {$ N#include
/ w5 P% E1 ?: C. z- N6 m' {#include 3 R  P7 S+ q" a, ~
#include , C+ I6 r/ W9 x* y3 K0 A
#include
, S* c3 m4 i5 h
) H5 i6 x. j2 T/ Pchar * j2f(char *s)! ~% d3 ?4 v/ y8 g9 |) J$ P5 {
{
. K$ l3 P4 Z8 n/ O int n=strlen(s);
6 d0 \# E1 H2 x! V1 L& Z int r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s), NULL,0);
$ H; l# g/ T; L  s2 {8 l: ]  G, y8 ]9 R* g if (!r)0 W+ d) Y. R- j+ I  i8 v. ^
return NULL;8 ^, g+ G6 j3 g( ~
char *ft=new char[r+1];
* Y0 U; I4 ^! g  M, l! X6 H  \8 ?; p r=LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),LCMAP_TRADITIONAL_CHINESE,s,strlen(s),ft,r+1);//这个api搞掂简体转繁体,下面会打?繁体出来
- e7 a. T3 e3 y; _; ~ if (r) {9 D! l; }! p$ O* ]( g+ `$ e% C) t
ft[r]=0;$ q% l% l# `2 v# n
wchar_t *pws=new wchar_t[r+1];
) ?6 I/ o. l( ?4 `' S  ~  ^2 C int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);0 M( q: J/ a5 D* o: G, R, O
BOOL f=FALSE;4 O: ^2 a6 ?8 o! I7 a! Z
r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5& V6 W0 O9 L1 R7 x; J
ft[r1]=0;
3 T9 t# O1 s0 x) B" I' B delete [] pws;* N7 i3 d# l5 Y6 E5 d
}3 j2 t! y* H  ^1 j: y( @1 j' C( M
strncpy(s,ft strlen(s));
/ D" X; @' n( Y delete []ft;
4 b3 A( t! c8 W return s;
4 K& M8 B+ O8 D: X! w( p& u} 返回NULL表示失败,如果s为const型,需要提供输出缓冲区,否则你必须释放这个函数返回来的指针的空间。将 strncpy(s,ft,strlen(s)); return s; 这两句的改为缓冲区地址即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 01:40 , Processed in 0.034103 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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