2012-09-13 14 views
5

OK, beh, questo mi sta facendo impazzire, lol.Delphi 7 - Decodifica Base64 utilizzando TIdDecoderMIME

Ho una stringa Base64 e sto cercando di decodificarlo in un TMemoryStream utilizzando TIdDecoderMIME.

Il mio codice attuale è la seguente:

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

Dove BString = mia stringa Base64.

Ora, quando il codice viene eseguito, viene visualizzato un messaggio di errore che indica "Dimensione non uniforme in DecodeToString".

Qualche idea?

Qualsiasi aiuto è molto apprezzato. Grazie.

risposta

4

Si passa alla funzione DecodeToStream una stringa Base64 la cui lunghezza non è un multiplo di 4. In altre parole, la stringa che si sta passando non è valida.

1

stringhe Base64 sono normalmente imbottiti con trailing "=" segni per assicurarsi che la loro lunghezza è un multiplo di 4.

Alcuni decoder proveranno a correggere i caratteri mancanti imbottitura, mentre altri non lo faranno. Vedere la domanda StackOverflow "Remove trailing “=” when base64 encoding"

L'oggetto TIdDecoderMime convalida l'input assicurandosi che sia un multiplo di 4 - che sarà se i caratteri di riempimento sono inclusi nell'input.