当前位置: 首页 > 知识库问答 >
问题:

无法使用 Convert.FromBase64String() 解码 base 64 字符串

咸疏珂
2023-03-14

我正在使用< code>Convert。FromBase64String()用于解码base 64编码的字符串。该字符串实际上是一个XML文件,其中包含base 64编码的图像。例如

data:image/png;base64,iVBORw0KGgoAA...

我遇到以下异常:

系统。格式异常:输入不是有效的Base-64字符串,因为它包含一个非基本64字符、两个以上的填充字符或填充字符中的非法字符。

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

编辑:

现在我尝试删除image/png;base64部分,我仍然收到这个错误。然后我尝试解码字符串<code>YWJj</code>,但出现了相同的错误!?如果我使用此代码

byte[] dataBuffer = Convert.FromBase64String(base64string);

我有上述例外。如果我使用

byte[] dataBuffer = Convert.FromBase64String("YWJj");

它确实有效。根据记事本,文件的编码是UTF-8。有什么想法吗?

编辑2:

< code >字符串。Equals表示两个字符串< code>YWJj不相等,尽管< code>Locals窗口显示它们是:

BTW上面的代码没有抛出异常,因为我用的是< code > string test = " YWJj。为什么它适用于本地定义的变量,而不适用于传递的字符串?我觉得不是线程问题,因为上面的函数是我做的,只调用一次。

共有3个答案

利俊迈
2023-03-14

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

2.< code>iVBORw0KGgoAA...也无效,这不是完整的base64字符串。

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

云焱
2023-03-14

正如我已经写的,我正在读入base 64编码文件,并用< code>Convert对其进行解码。FromBase64String()。现在我让它工作了,原因完全不知道。我做了什么?

我重命名了文件。就是这样。

之前我有一个像< code > NAME _ Something _ v 1.0 . xsl . b64 这样的文件名。现在我使用< code>NAME_Something.b64。也许这不是唯一的原因,但我是用< code>assembly从一个程序集访问该文件的。GetManifestResourceStream()。我以前清洗过这种溶液,但我总是遇到同样的问题。现在我把名字改回了原来的位置,它也工作了...

司徒炎彬
2023-03-14

您应该删除<code>数据:image/png;base64,要解码的字符串部分。

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

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

字符串<code>数据的部分:image/png;base64,不是base64数据。真正的编码数据在之后开始。Base64描述。所以函数<code>Convert。FromBase64String仅接受编码数据。因此,您需要提取编码数据。

 类似资料:
  • 问题内容: 是否有仅使用JAVA 1.5 LIBRARIES来解码base64字符串的简便方法? 由于Windows和Mac OS X之间存在跨平台兼容性问题,我必须使用Java 1.5(仅Mac 10.5支持Java 1.6,低于10.5的所有内容均默认使用Java 1.5)。 对象“ sun.misc.Base64Decoder”在Java 6中存在,但在Java 5中不存在。 问题答案: 不

  • 它失败了并给出了像贝娄这样的例外。 xml格式与不兼容吗?

  • 我一直在尝试在我的应用程序中实现GMAIL API,该应用程序是使用Swift5和Xcode构建的。我已经成功地检索到来自用户的电子邮件,但我无法从编码字符串中获得实际的文本。每当我尝试将这个base64编码的数据转换为普通字符串时,它都返回NIL。 这是绳子 stackoverflow的一些答案建议向string添加填充,但这也不起作用。

  • 我想将一个字符串编码成并通过套接字传输它,然后解码回来。 下面是我的代码,结果是“77+9x6s=” 有什么想法如何实现这一点吗?

  • 问题内容: 我需要在GWT中将短字符串编码为base 64,并在服务器上解码base 64字符串。有人为此有实用程序类或库吗? 问题答案: 您可以在除IE≤9之外的所有浏览器上的客户端上使用本机JavaScript,在服务器上可以使用官方类之一。 Java / GWT: 编码为。

  • 问题内容: 我正在使用Javascript 函数解码base64编码的字符串(特别是来自GitHubAPI的base64编码的内容)。问题是我回来了ASCII编码的字符(而不是)。如何正确处理传入的以base64编码的流,以便将其解码为utf-8? 问题答案: 此问题: “ Unicode问题”由于s是16位编码的字符串,因此在大多数浏览器中,如果字符超出8位字节的范围(0x00〜0xFF),则调