a:array of AnsiChar;//a的内容是“测试一下”  发送到其它客户端;
简体中文的客户端接收到这个a之后,可以很简单的转换为字符串
繁体中文的客户端接收到这个a之后,用同样的代码转换后是乱码
如何是简体还是繁体,调试时可以查看到这个数组里的内容是一样的。请高手看看如何将这个字符数组转换为一个能正常显示的字符串?

解决方案 »

  1.   

    a:array of WideChar//改成这样试一下
      

  2.   

    a:array of WideChar //改成这样试一下
      

  3.   

    我在简体系统中,在设计器的Edit控件中录入的简体字,在繁体系统中是可以正常显示的。但是先转换为ansichar数组,然后想转换为字符串就总是不成功!
      

  4.   

    这是编码的问题。big5字符集当中并没有“测试一下”这其中的前两个字,即使做编码转换,也会变为"??一下"
      

  5.   

    除非使用的是GB到BIG5的转换。
      

  6.   

    1.首先需要目标系统支持简体
    2.在简体下编译,转换的时候带上简体的代码页编号(CodePage,936),转换成Unicode.
      

  7.   

    2009里面的UnicodeString和widestring有什么区别吗?
      

  8.   

    有区别的
    widestring兼容UniCodeString
      

  9.   

    使用了以下的函数转换了代码页之后,的确已经可以在繁体系统中正确的显示出来了
    function StringToWideString(const S: AnsiString; CodePage: Word): WideString;
    var
        InputLength, OutputLength: Integer;
    begin
        InputLength := Length(S);
        OutputLength := MultiByteToWideChar(CodePage, 0, PAnsiChar(S), InputLength, nil, 0);
        SetLength(Result, OutputLength);
        MultiByteToWideChar(CodePage, 0, PAnsiChar(S), InputLength, PWideChar(Result), OutputLength);
    end;
    但是还有疑问,就是如果一个字符串中既有简体又有繁体,甚至还包含了一些日文等等的混合字符,这样的情况又该如何处理?
      

  10.   

    有什么文字并不要紧,关键是要编码一致。GBK当中本来就包含了这些字符,所以比如你只管编码是GBK即可。