5

好吧,这让我发疯了,哈哈。

我有一个 Base64 字符串,正在尝试使用 TIdDecoderMIME 将其解码为 TMemoryStream。

我目前的代码如下:

Var MStream:TMemoryStream; Decoder:TIdDecoderMIME;
begin
  Decoder := TIdDecoderMIME.Create(nil);
  MStream := TMemoryStream.Create;
  Decoder.DecodeToStream(BSting,MStream);
end;

其中 BString = 我的 Base64 字符串。

现在,当代码运行时,我收到一条错误消息,提示“DecodeToString 中的大小不均匀”。

有任何想法吗?

任何帮助是极大的赞赏。谢谢。

4

2 回答 2

4

您正在向DecodeToStream函数传递一个长度不是 4 的倍数的 Base64 字符串。换句话说,您传递的字符串是无效的。

于 2012-09-13T05:50:13.093 回答
1

Base64 字符串通常用尾随的“=”符号填充,以确保它们的长度是 4 的倍数。

一些解码器会尝试纠正丢失的填充字符,而另一些则不会。请参阅 StackOverflow 问题“ Base64 编码时删除尾随“=”

TIdDecoderMime 对象通过确保输入是 4 的倍数来验证输入 - 如果填充字符包含在输入中,它将是这样。

于 2012-09-13T15:45:30.720 回答