Delphi Base64 的“坑”

使用 Delphi 原生的Base64编码(System.NetEncoding 单元) ,编码后的字符串每隔76个字符会增加一个回车换行(#13#10),这样就导致和其他语言对接的时候出现问题,特别是Base64以后再进行签名,例如MD5签名,就会导致签名不一致。回车换行不容易看到,所以查找问题比较困难。

但是Delphi自己Base64编码解码都没有问题!

Delphi 帮助是这样说的:

To use TBase64Encoding you usually do not need to create your own instance. You can use TNetEncoding.Base64 instead.

实际上,如果使用 TNetEncoding.Base64 编码后就会出现多余的回车换行,如果Base64后的字符串长度不足76,当然也不存在问题,但是超过以后就会存在增加多余的回车换行的问题。

存在回车换行问题的代码:

S := TNetEncoding.Base64.Encode(SourceStr);

如果不需要回车换行,就通过命令去掉:

S := S.Replace(#13#10,'');

这样得到的就没有回车换行的结果了。

第二种方法就是直接使用 TBase64Encoding 类:

var
  LEncoding: TBase64Encoding;
begin
  LEncoding := TBase64Encoding.Create(-1,'');
  S := LEncoding.Encode(SourceStr);
  LEncoding.Free;
end;

这样得到的结果S就不会包含回车换行。注意Create中的参数,通过源代码可以看出这样的参数是可以的,当然 Create(0)也是可以的,Create是重载。

演示程序下载(含源程序和执行程序)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值