2012-09-13 115 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的倍數來驗證輸入 - 如果填充字符包含在輸入中,將會是這種情況。