Delphi EncodeBase64和TIDEncoderMime.EncodeStream的不同字符串长度

Delphi EncodeBase64和TIDEncoderMime.EncodeStream的不同字符串长度,delphi,Delphi,在下面的代码段中,方法1使showmessage显示10048,而方法2和3显示9792。哪种方法提供了在XML节点中使用的正确编码?磁盘上的文件大小是7343。谢谢 DrawingField: AnsiString; PicStream := TMemoryStream.Create; encoder := TidEncoderMIME.Create(nil); StringStream := TStringStream.Create(''); try Image1.Picture.Loa

在下面的代码段中,方法1使showmessage显示10048,而方法2和3显示9792。哪种方法提供了在XML节点中使用的正确编码?磁盘上的文件大小是7343。谢谢

DrawingField: AnsiString;
PicStream := TMemoryStream.Create;
encoder := TidEncoderMIME.Create(nil);
StringStream := TStringStream.Create('');
try
  Image1.Picture.LoadFromFile('Ryan.jpg');
  Image1.Picture.Graphic.SaveToStream(PicStream);

  {$ifdef METHOD1}
  DrawingField := EncodeBase64(PicStream.Memory, PicStream.Size);
  {$endif}
  {$ifdef METHOD2}
  PicStream.Position := 0;
  encoder.EncodeStream(PicStream, StringStream);
  DrawingField := StringStream.DataString;
  {$endif}
  {$ifdef METHOD3}
  PicStream.Position := 0;
  DrawingField := encoder.EncodeStream(PicStream, PicStream.Size);
  // SetString(DrawingField, PAnsiChar(PicStream.Memory), PicStream.Size);
  {$endif}

  ShowMessage(IntToStr(Length(DrawingField))); // 1 = 10048 2/3 = 9792
finally
  encoder.Free;
  PicStream.Free;
  StringStream.Free;
end;

他们中有人在插换行符吗?它们在Base64中被忽略是的,EncodeBase64每75个字符插入一次换行符。“它们在Base64中被忽略”是什么意思?如果我使用EncodeBase64,我必须在分配
CurrNode.Text:=DrawingField之前删除CR/LF还是对XML无所谓?取决于您需要哪种base64变体。有