2012-09-13 21 views
5

Tamam, peki bu beni deli ediyor, lol.Delphi 7 - Decode Base64 TIdDecoderMIME Kullanılıyor

Bir Base64 dizilim var ve TIdDecoderMIME kullanarak bir TMemoryStream içine kodunu çözmeye çalışıyorum. aşağıdaki gibi

Benim şu anki kodudur:

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

Nerede BString = My Base64 dize.

Kod çalıştırıldığında, "DecodeToString öğesinde eşit olmayan boyut" yazan bir hata iletisi alıyorum.

Herhangi bir fikrin var mı?

Her türlü yardım büyük beğeni topluyor. Teşekkürler.

cevap

4

DecodeToStream işlevine geçen, uzunluğu 4'ün katı olmayan bir Base64 dizesine geçersiniz. Başka bir deyişle, geçtiğiniz dizge geçersizdir.

1

Base64 dizeleri normalde kendi uzunluğu Bazı kod çözücüleri ederken, diğerleri olmaz eksik doldurma karakter için düzeltmeye çalışacağız 4.

katları olduğundan emin olmak için "=" işaretleri sondaki doldurulur. Bkz. StackOverflow sorusu "Remove trailing “=” when base64 encoding"

TIdDecoderMime nesnesi, girdinin dolgu sayısı içeriyorsa, bunun birden fazla 4 olduğundan emin olarak girişi doğrular.