当前位置:  开发笔记 > 编程语言 > 正文

Base64字符串抛出无效字符错误

如何解决《Base64字符串抛出无效字符错误》经验,为你挑选了1个好方法。

即使我不应该,我仍然会收到Base64无效字符错误.

该程序获取XML文件并将其导出到文档.如果用户想要,它也会压缩文件.压缩工作正常并返回一个Base64字符串,该字符串被编码为UTF-8并写入文件.

当它将文档重新加载到程序中时,我必须检查它是否被压缩,代码只是:

byte[] gzBuffer = System.Convert.FromBase64String(text);
return "1F-8B-08" == BitConverter.ToString(new List(gzBuffer).GetRange(4, 3).ToArray());

它检查字符串的开头以查看其中是否包含GZips代码.

现在的问题是,我的所有测试都有效.我拿一根绳子,压缩它,解压缩,并将它与原始的相比较.问题是当我从ADO Recordset返回字符串时.字符串正是写入文件的内容(最后添加了一个"\ 0",但我认为它甚至没有做任何事情,即使修剪它仍然会抛出).我甚至将整个字符串复制并粘贴到测试方法中并压缩/解压缩.工作良好.

测试将通过,但代码将使用完全相同的字符串失败?唯一的区别是,只是声明一个常规字符串并传递它,我从记录集返回一个.

关于我做错什么的任何想法?



1> Daniel LeChe..:

你说

字符串正是写入文件的内容(最后添加了"\ 0",但我认为甚至没有做任何事情).

事实上,它确实做了一些事情(它导致你的代码抛出FormatException:"Base-64字符串中的无效字符")因为Convert.FromBase64String不认为"\ 0"是有效的Base64字符.

  byte[] data1 = Convert.FromBase64String("AAAA\0"); // Throws exception
  byte[] data2 = Convert.FromBase64String("AAAA");   // Works

解决方案:摆脱零终止. (也许打电话.Trim("\0"))

备注:

在MSDN文档的Convert.FromBase64String说,它会抛出一个FormatException

忽略空格字符的s的长度不为零或为4的倍数.

-要么-

s的格式无效.s包含非基本64个字符,两个以上的填充字符或填充字符中的非空白字符.

然后

从零开始按升序排列的基数为64位的是大写字母"A"到"Z",小写字母"a"到"z",数字"0"到"9",符号"+"和"/" .

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有