ITPub博客

首页 > 应用开发 > IT综合 > Delphi 繁简转换

Delphi 繁简转换

原创 IT综合 作者:snakingmouse 时间:2014-03-19 09:13:49 0 删除 编辑
近期公司买了一台新中新的二代身份证阅读器开发HR系统的接口时,发现在简体系统可以正常使用,同时,在简体下将读出来的数据转成繁体保存到文本文件在繁 体系统下可以正常显示,但是一到繁体系统上使用,并转成繁体却是乱码;本以为半天可以完成的工作却弄了一个星期,同时经过网络也找不到方法;

经过一段时间的思考,应该是新中新提供的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); //繁体转简体

商业智能 BI


如有转载,请注明出处 http://www.erpgear.com/show.php?contentid=832

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8549402/viewspace-1124590/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    1
  • 访问量
    4454