【发布时间】:2019-04-03 23:58:48
【问题描述】:
我正在使用 C# 和 .NET 对 base64 字符串进行编码和解码。以下是我的代码的sn-ps:
Base64 编码:
using (var stream = new MemoryStream())
…...
return Convert.ToBase64String(stream.ToArray());
}
Base64 解码
byte[] bytes = Convert.FromBase64String(messageBody);
我的代码在 99% 的情况下都失败了,但只有 1% 的机会成功。堆栈跟踪如下:
返回 5xx 错误:System.FormatException:输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。在 System.Convert.FromBase64_ComputeResultLength(Char inputPtr, Int32 inputLength) 在 System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) 在 System.Convert.FromBase64String(String s)*
有谁知道什么会导致base64解码失败?我的编码和解码方法是对称的,我真的很困惑这个问题的根本原因是什么?
【问题讨论】:
-
您是如何收到
messageBody变量的?它是否包含文字换行符或其他非 base64 字符?您需要传递 base64 字符串,并且只传递 base64 字符串。 -
它是通过一些排队实现的;我们将编码后的 base64 字符串发送到队列并接收它并通过 base64 解码来使用它。
-
让我重新表述一下,请包括加载
messageBody变量的代码和失败的messageBody文本示例。显然它包含无效字符并导致错误。所以问题在于您传输数据或读取数据。 -
如果您能提供minimal reproducible example,那就太好了。向我们展示
messageBody的准确 值至关重要。当它失败时。如果您不知道,我建议您在失败时将其记录下来。此外,请务必记录messageBody的Length,以防有隐藏的空白字符。 -
What can cause Base64 decoding throw FormatException如果您要求它解码一个不是有效的base64编码字符串的字符串,就会发生这种情况。