经过一段时间的思考,应该是新中新提供的SDK有问题,于是跟新中新的工程师了解到他们是用C++写的SDK,在调用 MultiByteToWideChar 函数的区位码参数用的是常量,于是我想会不会是简体系统与繁体系统中这个常量的值不一样呢?于是,我让新中新的工程师帮忙取消掉这个常量,直接写成 “936”;
经修改后,在繁体系统下试,终于OK了,经过这一次的经历,让我对Unicode、 ANSI 码等表示中文 有了新的让识,以后再和大家慢慢分享 ...
Function GBCht2Chs(GBStr: String): AnsiString;
{进行GBK繁体转简体}
Var
Len: integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
Begin
pGBCHTChar := PChar(GBStr);
Len := MultiByteToWideChar(936, 0, pGBCHTChar, -1, Nil, 0);
GetMem(pGBCHSChar, Len * 2 + 1);
ZeroMemory(pGBCHSChar, Len * 2 + 1);
LCMapString($804, LCMAP_SIMPLIFIED_CHINESE, pGBCHTChar, -1, pGBCHSChar, Len * 2);
result := String(pGBCHSChar);
FreeMem(pGBCHSChar);
End;
Function GBChs2Cht(GBStr: String): AnsiString;
{进行GBK简体转繁体}
Var
Len: integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
Begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936, 0, pGBCHSChar, -1, Nil, 0);
GetMem(pGBCHTChar, Len * 2 + 1);
ZeroMemory(pGBCHTChar, Len * 2 + 1);
LCMapString($804, LCMAP_TRADITIONAL_CHINESE, pGBCHSChar, -1, pGBCHTChar, Len * 2);
result := String(pGBCHTChar);
FreeMem(pGBCHTChar);
End;
Memo1.text:=GBChs2Cht(Memo1.text); //简体转繁体
Memo1.text:=GBCht2Chs(Memo1.text); //繁体转简体
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8549402/viewspace-1124590/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8549402/viewspace-1124590/