我正在使用Convert.FromBase64String()
来解码基本64位编码的字符串。该字符串实际上是一个XML文件,其中包含基本64位编码图像。 E.g。
data:image/png;base64,iVBORw0KGgoAA...
我得到以下异常:
System.FormatException:输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符。
问题出在哪里?双基64编码?基础64编码数据中的字符串image/png;base64
?在线工具完全没有问题。
修改
现在我尝试从XML文件中删除image/png;base64
部分,但仍然出现此错误。然后我尝试用相同的错误解码字符串YWJj
!如果我使用此代码
byte[] dataBuffer = Convert.FromBase64String(base64string);
我得到了上述异常。如果我改用
byte[] dataBuffer = Convert.FromBase64String("YWJj");
确实有效。根据Notepad ++,文件的编码为UTF-8
。有什么想法吗?
编辑2:
String.Equals
表示两个字符串YWJj
不相等,尽管Locals
窗口显示它们是:
string test = "YWJj";
。为什么它适用于本地定义的变量,但不适用于传递的字符串?我不认为这是一个线程问题,因为我做了上面的函数,只调用一次。
答案 0 :(得分:2)
您应该从字符串中删除data:image/png;base64,
部分以进行解码。
strind data = "data:image/png;base64,iVBORw0KGgoAA...";
string[] pd = data.Split(',');
string decoded = Convert.FromBase64String(pd[1]);
字符串data:image/png;base64,
的部分不是base64数据。实数编码数据在,
之后开始。 Base64 description。因此,函数Convert.FromBase64String
仅接受编码数据。因此,您需要提取编码数据。
答案 1 :(得分:1)
正如我已经写过的那样,我正在读取基本64位编码文件并使用Convert.FromBase64String()
对其进行解码。现在我开始工作了,原因完全不可知。我做了什么?
我重命名了该文件。就是这样。
在我有NAME_Something_v1.0.xsl.b64
这样的文件名之前。现在我使用NAME_Something.b64
。也许这不是唯一的原因,但我正在使用assembly.GetManifestResourceStream()
从程序集中访问该文件。我之前已经清理过该解决方案,但我总是遇到同样的问题。现在我将名称改回原来的位置,它也有效......
答案 2 :(得分:0)
1。您不应该包含data:image/png;base64,
部分,因为这实际上不是base64字符串的一部分。
2。 iVBORw0KGgoAA...
也无效,这不是完整的base64字符串。
您可以通过拆分字符串或使用正则表达式解析它来解决此问题。
答案 3 :(得分:0)
data:image/png;base64,
之后的所有内容都是要解码的实际Base64字符串。
您可以删除字符串的第一部分,如下所示:
ImageAsString = ImageAsString.Substring(input.IndexOf('data:image/png;base64,') + 1);