我现在用C#.net写了一个socket客户端,然后用delphi7.0写的一个socket的服务器端,可是连接后当我用.net写的客户端往服务器端发送消息时,数字为空,比如我在客户端发送了个12345,跟踪到在delphi里的是#0'1'#0'2'#0'3'#0'4'#0'5',而显示到edit上面就是什么都没有,为空。好像是编码的问题,可是要怎么转换呢,C#的是Unicode编码,delphi这边应该怎么办呢,我试了很多方法啊,像widechartostring ,widechartostring ,WideString,都不行啊,我现在。delphi刚学的很不熟啊,请教下各位大侠啊~~~~~~~~~

解决方案 »

  1.   

    是Unicode编码,不过应该是'1'#0'2'#0'3'#0'4'#0这个顺序才对。
    在Delphi里你可以用WideString类型变量来存储它,然后再用AnsiString(变量)来强类型转换为AndiString。
      

  2.   

    是unicode, 没有错. 顺序也对. 
    用widestring/widechar/pwidechar来处理.
      

  3.   

    begin
        //取得匹配的客户端
        if session[i].CHandle = Socket.SocketHandle then
        begin
          //session[i].CSocket.SendText('回复客户端'+session[i].CAddress+' ==> '+Edit1.Text);
          //将从客户端读取的信息添加到Memo1中
        showmessage( Socket.ReceiveText);
        end;
    end;
    就是这样的,socket.receivetext得到socket通信客户端发来的信息,然后我想把这个信息显示出来,就这么简单,跟踪看到的就是#0'1'#0'2'#0'3'#0'4'#0'5',显示出来就空的什么都没有。要怎么转换下啊
      

  4.   


    改成这样试试:ShowMessage(AnsiString(WideString(Socket.ReceiveText)));
      

  5.   

    to:jadeluo 
    这个我试了,依然不行啊;
    我也觉得奇怪啊,但跟踪到的的确是#0'1'#0'2'#0'3'#0'4'#0'5'这个啊
      

  6.   

    试一下下面的代码,用字节数组接收内容,然后交换字节顺序,最后转换为WideString。var
      i, L: Integer;
      C   : Char;
      W   : WideString;
      Buf : array of Char;
    begin
      //取得匹配的客户端 
      if session[i].CHandle = Socket.SocketHandle then 
      begin 
        //session[i].CSocket.SendText('回复客户端'+session[i].CAddress+' ==> '+Edit1.Text); 
        //将从客户端读取的信息添加到Memo1中 
         L := Socket.ReceiveLength;
        SetLength(Buf, L);
        Socket.ReceiveBuf(Buf[0], L);
        //交换字节顺序
        for i := 0 to L div 2 - 1 do
        begin
          C := Buf[i * 2];
          Buf[i * 2] := Buf[i * 2 + 1];
          Buf[i * 2 + 1] := C;
        end;
        //转换为WideString
        SetLength(W, L div 2);
        Move (Buf[0], W[1], L);
        ShowMessage (W);
      end; 
    end;