Sigo recibiendo un error de carácter inválido de Base64 aunque no debería.Base64 String arrojando error de carácter no válido
El programa toma un archivo XML y lo exporta a un documento. Si el usuario lo desea, comprimirá el archivo también. La compresión funciona bien y devuelve una Cadena Base64 codificada en UTF-8 y escrita en un archivo.
Cuando es hora de volver a cargar el documento en el programa que tengo que comprobar si su comprimido o no, el código es simplemente:
byte[] gzBuffer = System.Convert.FromBase64String(text);
return "1F-8B-08" == BitConverter.ToString(new List<Byte>(gzBuffer).GetRange(4, 3).ToArray());
comprueba el principio de la cadena para ver si tiene el código gzips en eso.
Ahora sí, todas mis pruebas funcionan. Tomo una cuerda, la comprime, la descomprimo y la comparo con el original. El problema es cuando obtengo la cadena devuelta desde un conjunto de registros ADO. La cadena es exactamente lo que se escribió en el archivo (con la adición de un "\ 0" al final, pero no creo que, incluso, haga algo, incluso recortarlo). Incluso copio y pegué toda la cadena en un método de prueba y comprimir/descomprimir eso. Funciona bien.
¿Las pruebas pasarán pero el código fallará usando exactamente la misma cadena? La única diferencia es que en lugar de simplemente declarar una cadena regular y pasarla, obtengo una devuelta de un conjunto de registros.
¿Alguna idea sobre qué estoy haciendo mal?
Probablemente sería útil publicar un ejemplo de una cadena que está pasando a Convert.FromBase64String (por ejemplo, lo que obtiene en el resultado si coloca un Debug.Write directamente antes de la llamada) –
... incluso si publicó los primeros y últimos 8 o más bytes, y la longitud de la cadena, eso probablemente sería suficiente para ver que la cadena es del formato correcto. –
qGcAAB + LCA ... cAAA == Sus 2376 caracteres de largo. – Brandon