function StreamToString(aStream: TStream): string; var SS: TStringStream; begin if aStream <> nil then begin SS := TStringStream.Create(''); try aStream.Position := 0; SS.CopyFrom(aStream, aStream.Size); Result := SS.DataString; finally SS.Free; end; end else begin Result := ''; end; end;procedure TForm1.Button1Click(Sender: TObject); var BinData: Binary; aChar: PChar; begin aChar := '你'; try BinData := Binary.Create; BinData.Write(aChar^, Length(aChar)*Sizeof(Char)); Memo1.Lines.Add(StreamToString(BinData)); finally BinData.Free; end; end;用中文读出来乱码,英文可以。
var
SS: TStringStream;
begin
if aStream <> nil then
begin
SS := TStringStream.Create('');
try
aStream.Position := 0;
SS.CopyFrom(aStream, aStream.Size);
Result := SS.DataString;
finally
SS.Free;
end;
end else
begin
Result := '';
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
BinData: Binary;
aChar: PChar;
begin
aChar := '你'; try
BinData := Binary.Create;
BinData.Write(aChar^, Length(aChar)*Sizeof(Char));
Memo1.Lines.Add(StreamToString(BinData));
finally
BinData.Free;
end;
end;用中文读出来乱码,英文可以。
直接用TStringStream就行了吧:
SS.Write('你'); // 写
SS.DataString; // 读
procedure TForm1.Button1Click(Sender: TObject);
var
BinData: Binary;
aChar: PAnsiChar;
begin
aChar := '你'; try
BinData := Binary.Create;
BinData.Write(aChar^, Length(aChar));
Memo1.Lines.Add(StreamToString(BinData));
finally
BinData.Free;
end;
end;
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;