【发布时间】:2018-04-02 14:04:31
【问题描述】:
虽然这看起来很容易解决,但由于某种原因,我的 .net 应用程序根本不认为这是一个有效的 base64 字符串。
我正在使用 GMail API 来获取消息,在我尝试检索正文的最后一部分,我遇到了以下错误消息:
抛出异常:mscorlib.dll 中的“System.FormatException”
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)
在 wForm.Form1.d__9.MoveNext() 中E:\Programs\Programming\wForms\wForm\wForm\Form1.cs:line 127
这是编码字符串(在其他应用程序中可以很好地解码,例如实用程序信息网站): https://pastebin.ca/3893521
我用于加载 windows 窗体并获取这些消息的代码:
private async void Form1_Load(object sender, EventArgs e)
{
txtEmail_ID.Focus();
try
{
requestLabel = service.Users.Labels.List("me");
requestMessage = service.Users.Messages.List("me");
//requestMessage.LabelIds = "INBOX";
//requestMessage.IncludeSpamTrash = false;
// requestMessage.Q = "is:unread";
var messageResponse = await requestMessage.ExecuteAsync();
if (messageResponse != null && messageResponse.Messages != null)
{
foreach (var message in messageResponse.Messages)
{
var currentMessage = new messageInfo();
var requestNestedMessage = service.Users.Messages.Get("me", message.Id);
var nestedMessageResponse = await requestNestedMessage.ExecuteAsync();
if (nestedMessageResponse != null) // Check if we have nested params
{
foreach (var mParts in nestedMessageResponse.Payload.Headers) // Loop msg headers
{
if (mParts.Name == "Date")
{
currentMessage.msgDate = mParts.Value; // Get msg date
}
else if (mParts.Name == "From")
{
currentMessage.msgSender = mParts.Value; // Get msg sender
}
else if (mParts.Name == "Subject")
{
currentMessage.msgTitle = mParts.Value; // Get msg subject
}
}
if (nestedMessageResponse.Payload.Parts == null && nestedMessageResponse.Payload.Body != null)
{
currentMessage.msgBody = nestedMessageResponse.Payload.Body.Data;
}
else
{
currentMessage.msgBody = returnNestedParts(nestedMessageResponse.Payload.Parts, "");
}
Console.WriteLine(currentMessage.msgSender);
String codedString = currentMessage.msgBody.Replace("-", "+");
codedString = codedString.Replace("_", "/");
byte[] data = Convert.FromBase64String(codedString);
currentMessage.msgBody = Encoding.UTF8.GetString(data);
mInfo.Add(currentMessage);
}
}
}
} catch (Exception ex)
{
Console.WriteLine(ex);
}
//comboFolders.SelectedIndex = 0;
}
程序在它获取的每条消息上抛出异常,并且“第 127 行”在“byte[] data”上
我尝试在这个论坛中搜索类似的问题,但是,他们的解决方案似乎都没有奏效,因为他们中的大多数只是将 - 和 _ 符号更改为适合 base64url 类型的符号。
【问题讨论】: