Continuo a ricevere un errore di carattere non valido Base64 anche se non dovrei.Base64 Lancio di caratteri non validi errore
Il programma acquisisce un file XML e lo esporta in un documento. Se l'utente vuole, comprimerà anche il file. La compressione funziona correttamente e restituisce una stringa Base64 che è codificata in UTF-8 e scritta in un file.
Quando è il momento di ricaricare il documento nel programma devo controllare se il suo compresso o meno, il codice è semplicemente:
byte[] gzBuffer = System.Convert.FromBase64String(text);
return "1F-8B-08" == BitConverter.ToString(new List<Byte>(gzBuffer).GetRange(4, 3).ToArray());
controlla l'inizio della stringa per vedere se ha il codice gzip dentro.
Ora il fatto è che tutti i miei test funzionano. Prendo una stringa, comprimilo, lo decomprimo e lo paragono all'originale. Il problema è quando ottengo la stringa restituita da un Recordset ADO. La stringa è esattamente ciò che è stato scritto nel file (con l'aggiunta di un "\ 0" alla fine, ma non penso che faccia nulla, anche se ritagliato ancora getta). Ho persino copiato e incollato l'intera stringa in un metodo di prova e compresso/decompresso. Funziona bene.
I test passeranno ma il codice non funzionerà utilizzando la stessa stringa esatta? L'unica differenza è invece di dichiarare una stringa normale e passarla viene restituita da un recordset.
Qualche idea su cosa sto sbagliando?
Probabilmente sarebbe utile se si pubblicasse un esempio di una stringa che si sta passando a Convert.FromBase64String (ad esempio cosa si ottiene in uscita se si mette un Debug.Write direttamente prima della chiamata) –
... pari se hai postato il primo e l'ultimo 8 o più byte e la lunghezza della stringa, questo sarebbe probabilmente sufficiente per vedere che la stringa è il formato corretto. –
qGcAAB + LCA ... cAAA == Ha una lunghezza di 2376 caratteri. – Brandon