procedure TForm1.Button1Click(Sender: TObject);
var
  BinData: Binary; //引用uROTypes单元
  aStr: String;  sStream: TStringStream;
begin
  aStr := 'okokok';
  BinData := Binary.Create;
  BinData.Write(aStr, Length(aStr));
  BinData.Position := 0;  sStream := TStringStream.Create('');
  sStream.CopyFrom(BinData, BinData.Size);
  Memo1.Lines.Add(sStream.DataString);
end;结果就是不对,奇怪,大伙来看看吧。

解决方案 »

  1.   

    注意2010的string默认为unicode编码,和之前版本不一样
      

  2.   

    delphi支援Unicode之后,字符串型(string )占用4个字节,char占用2个字节。如果字符串长度不超过255,可以改用shortstring试试。aStr:shortstring
      

  3.   

    2010中文西文在一起的那种串解决的很好,用了双字节,不再像以前要用widestring什么的也不会有半个汉字的情况,比以前好多了
      

  4.   

    改成ShortString也不对,各位可以自己试试。会有截断。
    奇怪的是为什么用String显示会完全乱掉~~~
      

  5.   

    TStringStream 处理时带  TEncoding 试下.
      

  6.   

    应该是往Binary中写String有问题,ansiString也不行,并且丢失了unicode的好处,唉~~~~
      

  7.   

    自己搞定了~~~
    procedure TForm1.Button1Click(Sender: TObject);
    var
      BinData: Binary;
      aStr,bStr: string;
      sSize: Integer;
    begin
      aStr := 'aaa你好asas';
      sSize := Length(aStr)*SizeOf(string);
      try
        BinData := Binary.Create;
        BinData.Write(pointer(aStr)^, sSize);    BinData.Seek(0,soFromBeginning);  //BinData.Position := 0;
        SetLength(bStr,sSize);
        BinData.Read(pointer(bStr)^,sSize);    Memo1.Lines.Add(bStr);
      finally
        BinData.Free;
      end;
    end;