|
利用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; 这两句的改为缓冲区地址即可。 |
|