2012-09-13 16 views
5

OK, to doprowadza mnie do szału, lol.Delphi 7 - Dekodowanie Base64 przy użyciu TIdDecoderMIME

Mam ciąg Base64 i próbuję dekodować go do TMemoryStream przy użyciu TIdDecoderMIME.

Mój bieżący kod wygląda następująco:

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

Gdzie BString = Mam Base64 ciąg.

Teraz po uruchomieniu kodu pojawia się komunikat o błędzie "Nierówny rozmiar w trybie DecodeToString".

Wszelkie pomysły?

Każda pomoc jest bardzo doceniana. Dzięki.

Odpowiedz

4

Przechodzisz do funkcji, która jest łańcuchem Base64, którego długość nie jest wielokrotnością liczby 4. Innymi słowy, ciąg znaków, który przekazujesz, jest nieprawidłowy.

1

Base64 łańcuchy są zazwyczaj dopełniane spływu „=” znaki, aby upewnić się ich długość jest wielokrotnością 4.

Niektóre dekodery będą próbować skorygować brakujących znaków wypełniających, podczas gdy inni nie. Zobacz pytanie StackOverflow "Remove trailing “=” when base64 encoding"

Obiekt TIdDecoderMime sprawdza poprawność danych wejściowych, upewniając się, że jest to wielokrotność 4 - co będzie, jeśli znaki dopełnienia są zawarte w danych wejściowych.

Powiązane problemy