无法使用 Convert.FromBase64String() 解码 base 64 字符串
Can't decode a base 64 string with Convert.FromBase64String()
我正在使用 Convert.FromBase64String()
解码 base 64 编码的字符串。该字符串实际上是一个 XML 文件,其中包含 base 64 编码的图像。例如
data:image/png;base64,iVBORw0KGgoAA...
我得到以下异常:
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
问题出在哪里?双base 64编码? base 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
Window 表明它们是:
顺便说一句,上面的代码没有抛出异常,因为我使用了string test = "YWJj";
。为什么它适用于局部定义的变量,但不适用于传递的字符串?我觉得不是线程的问题,因为我做了上面的函数,只调用了一次
1. 你不应该包含 data:image/png;base64,
部分,因为这实际上不是 base64 字符串的一部分。
2. iVBORw0KGgoAA...
也无效,这不是完整的 base64 字符串。
您可以通过拆分字符串或使用正则表达式解析来解决此问题。
data:image/png;base64,
之后的所有内容都是要解码的实际 Base64 字符串。
您可以像这样删除字符串的第一部分:
ImageAsString = ImageAsString.Substring(input.IndexOf('data:image/png;base64,') + 1);
您应该从要解码的字符串中删除 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. So function Convert.FromBase64String
只接受编码数据。因此,您需要提取编码数据。
正如我已经写过的,我正在读取 base 64 编码文件并使用 Convert.FromBase64String()
对其进行解码。现在我让它工作了,原因是完全未知的。我做了什么?
我重命名了文件。就是这样。
之前我有一个像 NAME_Something_v1.0.xsl.b64
这样的文件名。现在我使用 NAME_Something.b64
。也许这不是唯一的原因,但我正在使用 assembly.GetManifestResourceStream()
从程序集中访问文件。我以前清理过解决方案,但我总是遇到同样的问题。现在我把名字改回原来的地方,它也可以工作......
我正在使用 Convert.FromBase64String()
解码 base 64 编码的字符串。该字符串实际上是一个 XML 文件,其中包含 base 64 编码的图像。例如
data:image/png;base64,iVBORw0KGgoAA...
我得到以下异常:
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
问题出在哪里?双base 64编码? base 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
Window 表明它们是:
顺便说一句,上面的代码没有抛出异常,因为我使用了string test = "YWJj";
。为什么它适用于局部定义的变量,但不适用于传递的字符串?我觉得不是线程的问题,因为我做了上面的函数,只调用了一次
1. 你不应该包含 data:image/png;base64,
部分,因为这实际上不是 base64 字符串的一部分。
2. iVBORw0KGgoAA...
也无效,这不是完整的 base64 字符串。
您可以通过拆分字符串或使用正则表达式解析来解决此问题。
data:image/png;base64,
之后的所有内容都是要解码的实际 Base64 字符串。
您可以像这样删除字符串的第一部分:
ImageAsString = ImageAsString.Substring(input.IndexOf('data:image/png;base64,') + 1);
您应该从要解码的字符串中删除 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. So function Convert.FromBase64String
只接受编码数据。因此,您需要提取编码数据。
正如我已经写过的,我正在读取 base 64 编码文件并使用 Convert.FromBase64String()
对其进行解码。现在我让它工作了,原因是完全未知的。我做了什么?
我重命名了文件。就是这样。
之前我有一个像 NAME_Something_v1.0.xsl.b64
这样的文件名。现在我使用 NAME_Something.b64
。也许这不是唯一的原因,但我正在使用 assembly.GetManifestResourceStream()
从程序集中访问文件。我以前清理过解决方案,但我总是遇到同样的问题。现在我把名字改回原来的地方,它也可以工作......