【发布时间】:2009-04-02 17:51:05
【问题描述】:
我不断收到 Base64 无效字符错误,即使我不应该这样做。
程序获取一个 XML 文件并将其导出为文档。如果用户需要,它也会压缩文件。压缩工作正常并返回一个 Base64 字符串,该字符串编码为 UTF-8 并写入文件。
当需要将文档重新加载到程序中时,我必须检查它是否被压缩,代码很简单:
byte[] gzBuffer = System.Convert.FromBase64String(text);
return "1F-8B-08" == BitConverter.ToString(new List<Byte>(gzBuffer).GetRange(4, 3).ToArray());
它检查字符串的开头是否有 GZips 代码。
现在问题是,我的所有测试都有效。我取一个字符串,对其进行压缩、解压缩,然后将其与原始字符串进行比较。问题是当我得到从 ADO 记录集返回的字符串时。该字符串正是写入文件的内容(最后添加了“\ 0”,但我认为它甚至不会做任何事情,即使修剪掉它仍然会抛出)。我什至将整个字符串复制并粘贴到测试方法中并压缩/解压缩。工作正常。
测试会通过,但使用完全相同的字符串代码会失败?唯一的区别是,我不是仅仅声明一个常规字符串并将其传递给我,而是从记录集中返回一个。
关于我做错了什么有什么想法吗?
【问题讨论】:
-
如果您发布一个您传递给 Convert.FromBase64String 的字符串示例,这可能会有所帮助(例如,如果您在调用之前直接放置一个 Debug.Write,您会得到什么输出)
-
...即使您发布了第一个和最后 8 个字节左右以及字符串长度,也可能足以看出该字符串是正确的格式。
-
qGcAAB+LCA ... cAAA== 它的 2376 个字符长。
-
您是否仍然收到 FormatException:Invalid Characters,还是其他异常?
-
...我想你一定知道问题出在哪里了?
标签: c# string ado.net base64 invalid-characters