1

自过去 2-3 天以来,我一直在努力寻找以下异常的解决方案:

The input is not a valid Base-64 string as it contains a non-base 64 character,
more than two padding characters, or a non-white space character among the
padding characters.

我搜索了类似的问题并找到了答案,但没有一个对我有用。这是我要转换的数据:

{\"Package\":[{\"Faq\":[{\"FaqId\":1,\"AppId\":65,\"Title\":\"Test1\",
 \"Description\":\"Test1\",\"IsRemoved\":false,\"AddDate\":1344969000,
 \"LastUpdated\":1344969000},{\"FaqId\":2,\"AppId\":65,\"Title\":\"Test2\",
 \"Description\":\"Test2\",\"IsRemoved\":false,\"AddDate\":1344969000,
 \"LastUpdated\":1344969000}]}\r\n]}\r\n"

现在我无法识别哪些是非基数 64 字符。如果有哪些是那些?以及如何删除它们?

我用来解析字符串的 c# 代码行:

data.Data = Convert.FromBase64String(data.Data.ToString());

data.Data包含上述数据。

我该如何解决这个问题?

4

4 回答 4

4

你正在尝试错误的方式。FromBase64String 转换 FROM Base64(即采用 Base64 编码的字符串并将其转换为原始字符串),而不是 TO Base64(采用普通字符串并转换为 base64 编码)。由于您提供该方法的字符串不是 base64 编码的,因此它退出了。

于 2012-08-19T06:42:59.350 回答
0
data.Data = Convert.FromBase64String(data.Data.ToString());
// NOTE: The packager has some different behavior because it GZIPs the output.
// service cleanup, logging, and outgoing response. NOTE: the ORDER of this is important.
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Encoding", "gzip");
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Disposition", "attachment; filename=package.json");

ThreadPool.QueueUserWorkItem(delegate
{
    man.Save("Package served.");
});

return new MemoryStream((byte[])data.Data);

这是我的代码。现在,如果删除 base64 转换并反序列化 json,则它无法保存 json 文件。它会抛出无法保存json文件,无法读取源代码的错误。

于 2012-08-20T06:31:49.033 回答
0

如果 "{\"Package\":[{\"Faq\":[{\"FaqId\":1,\"AppId\":65,\"Title\":\"Test1\",\"Description \":\"Test1\",\"IsRemoved\":false,\"AddDate\":1344969000,\"LastUpdated\":1344969000},{\"FaqId\":2,\"AppId\":65 ,\"Title\":\"Test2\",\"Description\":\"Test2\",\"IsRemoved\":false,\"AddDate\":1344969000,\"LastUpdated\":1344969000}] }\r\n]}\r\n" 是您要转换的字符串,那么它实际上不是基于 64 位的有效输入。您可以在此处创建转换版本http://base64converter.com/

于 2012-08-19T06:52:06.350 回答
0

您在这里拥有的是 JSON,而不是 BASE64。使用 JSON 反序列化器,例如JSON.NET

于 2012-08-19T15:28:48.503 回答