使用INDY解决BASE64回车换行问题

使用INDY解决BASE64回车换行问题

使用DELPHI EncodeStream(),对流数据进行BASE64编译以后,每隔75个字符,就会添加回车换行符(#$D#$A),这会造成许多问题。

网上许多解决方法,是对BASE64的字符串中的回车换行符,使用ReplaceStr(str,#$D#$A,''...)替换掉回车换行符。

虽然这样可以解决问题,但多执行了操作,从而影响了程序的性能。

下面使用INDY来帮助解决问题:

INDY的BASE64编码,不会每隔75个字符,就会添加回车换行符(#$D#$A)。

uses IdCoderMIME

var IdEncoderMIME: TIdEncoderMIME;
ms := TMemoryStream.Create; IdEncoderMIME := TIdEncoderMIME.Create(nil); try TZipTools.ZipStream(stream, ms); // zip ms.Position := 0; {$IF CompilerVersion <= 15} // d7 Result := IdEncoderMIME.Encode(ms); {$ELSE} Result := IdEncoderMIME.EncodeStream(ms); {$IFEND} finally ms.Free; IdEncoderMIME.Free; end;

 

IdDeCoderMIME: TIdDeCoderMIME;
  ms := TMemoryStream.Create;
  IdDeCoderMIME := TIdDecoderMIME.Create(nil);
  try
    {$IF CompilerVersion <= 15}    // d7
    IdDeCoderMIME.DecodeToStream(str, ms);      // indy9
    {$ELSE}
    IdDeCoderMIME.DecodeStream(str, ms);        // indy10
    {$IFEND}
    ms.Position := 0;
    TZipTools.UnZipStream(ms, stream);  // unzip
  finally
    ms.Free;
    IdDeCoderMIME.Free;
  end;

  

 

posted @ 2019-06-27 11:35  delphi中间件  阅读(1112)  评论(0编辑  收藏  举报