C# Can';t使用Convert.FromBase64String()对基64字符串进行解码

C# Can';t使用Convert.FromBase64String()对基64字符串进行解码,c#,base64,C#,Base64,我正在使用Convert.FromBase64String()对Base64编码的字符串进行解码。字符串实际上是一个XML文件,其中包含base64编码的图像。例如 data:image/png;base64,iVBORw0KGgoAA... 我得到以下例外情况: System.FormatException:输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符 问题在哪里?双基64编码?字符串image/png;base64编码数据中的

我正在使用
Convert.FromBase64String()
对Base64编码的字符串进行解码。字符串实际上是一个XML文件,其中包含base64编码的图像。例如

data:image/png;base64,iVBORw0KGgoAA...
我得到以下例外情况:

System.FormatException:输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符

问题在哪里?双基64编码?字符串
image/png;base64编码数据中的base64
?在线工具根本没有问题

编辑:

现在我尝试删除
image/png;base64是XML文件的一部分,我仍然收到这个错误。然后我试着用同样的错误解码字符串
YWJj
!?如果我使用这个代码

byte[] dataBuffer = Convert.FromBase64String(base64string);
我得到了上面的例外。如果我改用

byte[] dataBuffer = Convert.FromBase64String("YWJj");
它确实有效。根据Notepad++,文件的编码为
UTF-8
。有什么想法吗

编辑2:

String.Equals
表示两个字符串
YWJj
不相等,尽管
Locals
窗口显示它们是:


顺便说一句,上面的代码不会抛出异常,因为我使用
string test=“YWJj”。为什么它可以处理本地定义的变量,但不能处理传递的字符串?我认为这不是线程问题,因为我创建了上面的函数,只调用了一次。

1。您不应该包含
数据:image/png;base64,
part,因为它实际上不是base64字符串的一部分

2.
iVBORw0KGgoAA…
也无效,这不是完整的base64字符串


您可以通过拆分字符串或使用正则表达式对其进行解析来解决此问题。

1。您不应该包含
数据:image/png;base64,
part,因为它实际上不是base64字符串的一部分

2.
iVBORw0KGgoAA…
也无效,这不是完整的base64字符串


您可以通过拆分字符串或使用正则表达式对其进行解析来解决此问题。

数据之后的所有内容:image/png;base64,
是要解码的实际base64字符串

可以删除字符串的第一部分,如下所示:

ImageAsString = ImageAsString.Substring(input.IndexOf('data:image/png;base64,') + 1);

数据后的所有内容:图像/png;base64,
是要解码的实际base64字符串

可以删除字符串的第一部分,如下所示:

ImageAsString = ImageAsString.Substring(input.IndexOf('data:image/png;base64,') + 1);

您应该删除
数据:image/png;base64,
从字符串分割到解码

strind data = "data:image/png;base64,iVBORw0KGgoAA...";
string[] pd = data.Split(',');

string decoded = Convert.FromBase64String(pd[1]);

字符串
数据部分:image/png;base64,
不是base64数据。实际编码数据在
之后开始。所以函数只接受编码数据。因此,您需要提取编码数据。

您应该删除
数据:image/png;base64,
从字符串分割到解码

strind data = "data:image/png;base64,iVBORw0KGgoAA...";
string[] pd = data.Split(',');

string decoded = Convert.FromBase64String(pd[1]);

字符串
数据部分:image/png;base64,
不是base64数据。实际编码数据在
之后开始。所以函数只接受编码数据。因此,您需要提取编码数据。

正如我已经编写的那样,我正在读取中的base 64编码文件,并使用
Convert.FromBase64String()
对其进行解码。现在我开始工作了,原因完全不知道。我做了什么

我重新命名了这个文件。就这样


以前我有一个文件名,比如
NAME\u Something\u v1.0.xsl.b64
。现在我使用
NAME\u Something.b64
。也许这不是唯一的原因,但我正在使用
assembly.GetManifestResourceStream()
从程序集访问该文件。我以前清洗过溶液,但我总是遇到同样的问题。现在我将名称改回原来的位置,它也可以工作…

正如我已经编写的那样,我正在读取中的base 64编码文件,并使用
Convert.FromBase64String()
对其进行解码。现在我开始工作了,原因完全不知道。我做了什么

我重新命名了这个文件。就这样


以前我有一个文件名,比如
NAME\u Something\u v1.0.xsl.b64
。现在我使用
NAME\u Something.b64
。也许这不是唯一的原因,但我正在使用
assembly.GetManifestResourceStream()
从程序集访问该文件。我以前清洗过溶液,但我总是遇到同样的问题。现在我将名称改回原来的位置,它也可以工作了…

您是否应该删除
数据:image/png;base64,
part?仅使用数据的编码部分作为输入到
Convert.FromBase64String()
我无法删除它。但问题是,如果
Convert.FromBase64String()
不能处理这样的字符串,请向代码展示如何删除
image/png;base64
并显示调试时的变量值。@BWA:I已删除
image/png;base64
直接从文件中获取,然后对该文件进行base64编码并保存为项目中的文件。然后我以字符串形式读取文件并尝试对其进行解码;base64,
part?仅使用数据的编码部分作为输入到
Convert.FromBase64String()
我无法删除它。但问题是,如果
Convert.FromBase64String()
不能处理这样的字符串,请向代码展示如何删除
image/png;base64
并显示调试时的变量值。@BWA:I已删除
image/png;base64
直接从文件中获取,然后对该文件进行base64编码并保存为项目中的文件。然后我读取字符串中的文件并尝试解码它。