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

  

 

使用INDY解决BASE64回车换行问题的更多相关文章

  1. 解决SublimeCodeIntel回车换行误打代码

    SublimeCodeIntel会自动匹配并联想词汇, 这在换行的时候非常麻烦, 每次点Enter 都会误打出代码, 解决办法分两步:第一步是在Perferences/setting User 中加入 ...

  2. Javascript去掉base64中的回车换行

    给天津海关开发手机插件. 他们的API返回的文件base64遵循了RFC822规定,即BASE64编码每76个字符,还需要加上一个回车换行. 这就导致了我的Ant Design Mobile图片控件不 ...

  3. 使用UltraEdit 替换解决---文字中含有逗号的文件,如何把逗号自动转换成为:回车换行呢?

    实际工作中有时经常遇到一个问题: 一行文字中含有逗号,如何把逗号自动转换成为:回车换行呢? 普遍存在的问题,用Ultredit中^r^n(回车换行)也可以完成.提供大家参考. 王乐,李宏宇,张志鹏,刘 ...

  4. 写入文本文件时“\n”不是回车换行而是个方块“■”的解决方法

    用“\n”写入文本文件时,打开文本文件显示的为什么不是回车换行而是个黑方块“■”,但用file()读取时还是认为是一行一行的? 首先在WINDOWS里回车换行是"\r\n"; 而L ...

  5. 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)

    原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...

  6. php去除换行(回车换行)的方法

    php去除换行(回车换行)的三种方法. 代码: <?php     //php 不同系统的换行   //不同系统之间换行的实现是不一样的   //linux 与unix中用 \n   //MAC ...

  7. Oracle的dbms_output包的put()和put_line()的区别只是有没有回车换行吗?(转)

    答案是否 除了自动添加回车换行外,还有就是缓冲区最大容量的问题!! 无论如何设置serveroutput size,10g里 put() 最多只能输出 32767 个byte 而 put_line() ...

  8. linux与windows回车换行符的区别

    转自:http://www.cnblogs.com/dartagnan/archive/2010/12/14/2003499.html “回车”(carriage return)VS  “换行”(li ...

  9. 【aardio】回车换行符

    回车换行符 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字 ...

随机推荐

  1. C++ 基础知识汇总 持续更新

    摘录一些C++面试常考问题,写一些自己的理解,花了挺长时间的,作图是真的累,欢迎来摘果子. static关键字 用于声明静态对象: 静态函数只在本文件可见.(默认是extern的) 全局静态对象:全局 ...

  2. node.js 微信开发2-消息回复、token获取、自定义菜单

    项目结构 >config/wechat.json 微信公众号的配置文件 >controllers/oauth.js 微信网页授权接口(下一篇再细讲讲) >controllers/we ...

  3. Centos7.6进入挂载硬盘后,进入应急模式(emergency mode)而非图形模式解决方法

    Centos7.6进入挂载硬盘后,进入应急模式(emergency mode)而非图形模式解决方法 话说某天我想在centos7.6中挂载个硬盘,结果刚在虚拟机中添加了一块硬盘,再次打开系统时,居然就 ...

  4. 阿里云ECS配置JDK和tomcat

    一.配置JDK 1.利用Xftp连接ECS 2.新建文件夹 在ECS上新建一个放压缩包的文件夹,便于整理 (此处也可以在xshell中利用代码新建mkdir /home/temp) 3.将下载好的JD ...

  5. SATB的标记问题解决之道与G1垃圾收集模式系统详解及最佳实践

    继续接着上一次https://www.cnblogs.com/webor2006/p/11148282.html的理论学习,上一次学习到了这: 接着继续: SATB详解: 对于三色算法在concurr ...

  6. 关于TCP/IP协议的记录

    本博客是个人随笔,只是记录自己的学习过程.

  7. 文件读写(三)利用FileStream类操作字节数组byte[]、BinaryFormatter、内存流MemoryStream

    一.Stream类概述 在.NET Framework中,文件和流是有区别的.文件是存储在磁盘上的数据集,它具有名称和相应的路径.当打开一个文件并对其进行读/写时,该文件就称为流(stream).但是 ...

  8. Java出现 The server time zone value '�й���׼ʱ��' is unrecognized 异常

    解决办法: 在配置连接数据库的URL后面加上?serverTimezone=UTC ,如下: jdbc:mysql://localhost:3306/test?serverTimezone=UTC

  9. mybatis执行insert后马上能获取自增主键的语句写法

    <!--keyColumn keyProperty useGeneratedKeys 用于在插入数据后,能直接使用user.getId()获取主键--> <insert id=&qu ...

  10. leetcode解题报告(23):Pascal's Triangle

    描述 Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, R ...