2012-09-13 13 views
5

OK, nun, das macht mich verrückt, lol.Delphi 7 - Decode Base64 mit TIdDecoderMIME

Ich habe eine Base64-Zeichenfolge und versuche, es mit TIdDecoderMIME in einen TMemoryStream zu decodieren.

Mein aktueller Code ist wie folgt:

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

Wo bstring = Mein Base64-String.

Jetzt, wenn der Code ausgeführt wird, erhalte ich die Fehlermeldung "Ungleiche Größe in DecodeToString."

Irgendwelche Ideen?

Jede Hilfe wird sehr geschätzt. Vielen Dank.

Antwort

4

Sie übergeben an die DecodeToStream Funktion eine Base64-Zeichenfolge, deren Länge kein Vielfaches von 4 ist. Mit anderen Worten, die Zeichenfolge, die Sie übergeben, ist ungültig.

1

Base64-Strings werden in der Regel mit nachfolgendem „=“ Zeichen aufgefüllt ihre Länge ein Vielfaches von 4

, um sicherzustellen, ist versuchen, einige Decoder für die fehlenden Polsterung Zeichen zu korrigieren, während andere nicht. Siehe die StackOverflow-Frage "Remove trailing “=” when base64 encoding"

Das TIdDecoderMime-Objekt überprüft die Eingabe, indem es sicherstellt, dass es ein Vielfaches von 4 ist. Dies ist der Fall, wenn die Füllzeichen in der Eingabe enthalten sind.