Delphi 繁简转换

近期公司买了一台新中新的二代身份证阅读器开发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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8549402/viewspace-1124590/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值