环境: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,在简体平台上转自然没问题,但是到了繁体平台,默认语言不是简体,所以出了问题。
请帮忙诊断解决,万分感谢!

解决方案 »

  1.   

    TO simb() 
    什么叫“全部都用宽字符”? 具体一点吧,我是Delphi菜鸟! 另外说明下,数据是用硬件读卡器从IC卡里面读出来的!
      

  2.   

    我试过了,代码如下,但是还是乱码,不知道写得对否?aName:array[0..29] of char;
    s1 : WideString;
    ...
    FillChar(aName,30,0);
    ...
    s1 := aName;
    此时出现的乱码如下:
    'Ng鐹'#$1B'g '该怎么使用呢? aName存的是简体字串,但是现在平台是繁体,怎么处理呢? 我试过用转码的API进行转换,但是仍然得到的是“李?望”! 郁闷
      

  3.   

    简体转为繁体的代码如下,来自网上,在简体平台上测试简体转繁体毫无问题,在繁体版本上,对程序中写死的简体中文转码也没问题:
    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;
      

  4.   

    在繁体系统进行简繁转化后,控件的字符集CHARSET 也要设置成CHINESEBIG5_CHARSET.
      

  5.   

    问题是我现在直接在Debug里看到的就是乱码,还没有到控件里去显示。我是通过一个软件将简体工程转换成繁体工程的,表面上看各个控件的caption都是对应的繁体了,本身的charset我还没注意到!
      

  6.   

    谁愿意帮我解决问题,我可以给500分,只要CSDN不会认为我作弊,^_^!
    最好是连线解决,我的QQ是15157587,可以远程协助,请高手指点,对于你们来说应该是小菜一碟!
      

  7.   

    1. 为什么用 char数组,为什么不用string ?
    2. 如果目标系统是繁体,编译前先把串转换成Big5编码的,当然在简体系统下编辑源码时看到的是乱码,在繁体系统下运行时就显示正常了。工具 Big5GB.exe 用来转码
      

  8.   

    ahjoe(强哥)  在线帮我解决了问题,在此贴出问题所在:
    从读卡器读出的字串本身就是简体中文的unicode,在繁体平台转成对应的繁体自然某些字找不到,如果使用TntUnicode控件则可以正常显示简体中文!当然,如果我希望的是在繁体平台上也显示对应的繁体,则需要将简体unicode通过对应表,找到对应的繁体unicode进而变成big5,从而在繁体平台正常显示! 那就是其他的问题了!结贴!