• 使用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;
    

      

     

  • 相关阅读:
    C# winform 获取鼠标点击位置
    C# 读取带有命名空间的xml
    ImageUtility辅助类
    C# 读取XML
    C# 根据生日获取年龄
    C# 将 WebService 封装成动态库
    C# 生成条形码
    C# Ftp Client 基本操作
    C# SQL帮助类
    C# 解压缩文件
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11096076.html
Copyright © 2020-2023  润新知