环境:WinXP SP2 简体中文; WinXP SP2繁体中文(台湾),Delphi7.0
问题:在简体环境中,将char数组转成简体中文字串,没有问题;但是在繁体环境下,有部分乱码,乱码形式为问号,如
数组为:('N', 'g', #246, 'e', #27, 'g', ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0)
转换的结果为: 李?望主要代码如下:aName:array[0..29] of char;
...
FillChar(aName,30,0);
...
copymemory(@aname,@TmpCHMsg,30);
...
LName.Caption:=ConvertLang(WideCharLenToString(@aName,15));主要使用WideCharLenToString对char数组进行转换,感觉因为数组里的char串本来就是简体ANSI,在简体平台上转自然没问题,但是到了繁体平台,默认语言不是简体,所以出了问题。
请帮忙诊断解决,万分感谢!
问题:在简体环境中,将char数组转成简体中文字串,没有问题;但是在繁体环境下,有部分乱码,乱码形式为问号,如
数组为:('N', 'g', #246, 'e', #27, 'g', ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0, ' ', #0)
转换的结果为: 李?望主要代码如下:aName:array[0..29] of char;
...
FillChar(aName,30,0);
...
copymemory(@aname,@TmpCHMsg,30);
...
LName.Caption:=ConvertLang(WideCharLenToString(@aName,15));主要使用WideCharLenToString对char数组进行转换,感觉因为数组里的char串本来就是简体ANSI,在简体平台上转自然没问题,但是到了繁体平台,默认语言不是简体,所以出了问题。
请帮忙诊断解决,万分感谢!
什么叫“全部都用宽字符”? 具体一点吧,我是Delphi菜鸟! 另外说明下,数据是用硬件读卡器从IC卡里面读出来的!
s1 : WideString;
...
FillChar(aName,30,0);
...
s1 := aName;
此时出现的乱码如下:
'Ng鐹'#$1B'g '该怎么使用呢? aName存的是简体字串,但是现在平台是繁体,怎么处理呢? 我试过用转码的API进行转换,但是仍然得到的是“李?望”! 郁闷
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);
//GB CHS -> GB CHT
LCMapString($804,LCMAP_TRADITIONAL_CHINESE,pGBCHSChar,-1,pGBCHTChar,Len*2);
Result := String(pGBCHTChar);
FreeMem(pGBCHTChar);
//FreeMem(pGBCHSChar);
end;
最好是连线解决,我的QQ是15157587,可以远程协助,请高手指点,对于你们来说应该是小菜一碟!
2. 如果目标系统是繁体,编译前先把串转换成Big5编码的,当然在简体系统下编辑源码时看到的是乱码,在繁体系统下运行时就显示正常了。工具 Big5GB.exe 用来转码
从读卡器读出的字串本身就是简体中文的unicode,在繁体平台转成对应的繁体自然某些字找不到,如果使用TntUnicode控件则可以正常显示简体中文!当然,如果我希望的是在繁体平台上也显示对应的繁体,则需要将简体unicode通过对应表,找到对应的繁体unicode进而变成big5,从而在繁体平台正常显示! 那就是其他的问题了!结贴!