2012-09-13 118 views
5

OK, bueno esto me está volviendo loco, lol.Delphi 7 - Decode Base64 Usando TIdDecoderMIME

Tengo una cadena Base64 y estoy tratando de decodificarla en un TMemoryStream usando TIdDecoderMIME.

Mi código actual es la siguiente:

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

Dónde bstring = Mi cadena Base64.

Ahora, cuando se ejecuta el código, aparece un mensaje de error que dice "Tamaño desigual en DecodeToString".

¿Alguna idea?

Cualquier ayuda es muy apreciada. Gracias.

Respuesta

4

Está pasando a la función DecodeToStream una cadena de Base64 cuya longitud no es un múltiplo de 4. En otras palabras, la cadena que está pasando no es válida.

1

cadenas Base64 normalmente se rellenan con arrastrarse "=" señales para asegurarse de que su longitud es un múltiplo de 4.

Algunos decodificadores a tratar de corregir los caracteres de relleno que faltan mientras que otros no lo harán. Consulte la pregunta de StackOverflow "Remove trailing “=” when base64 encoding"

El objeto TIdDecoderMime valida la entrada asegurándose de que sea un múltiplo de 4, lo que sucederá si los caracteres de relleno se incluyen en la entrada.