zoukankan      html  css  js  c++  java
  • 使用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;
    

      

     

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11096076.html
Copyright © 2011-2022 走看看