base64 加密有空格 换行_使用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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值