2012-09-13 90 views
5

好吧,这是让我疯狂,哈哈。德尔福7 - 解码Base64使用TIdDecoderMIME

我有一个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

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

1

Base64编码字符串通常尾随“=”标志,以确保它们的长度是4

多一些解码器将设法纠正失踪的填充字符,而另一些则不会填充。请参阅StackOverflow问题“Remove trailing “=” when base64 encoding

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