输入不是有效的Base64字符串,因为它包含非基本64字符

时间:2012-08-19 06:39:39

标签: c#-4.0

自从过去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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

如果“{\”Package \“:[{\”Faq \“:[{\”FaqId \“:1,\”AppId \“:65,\”Title \“:\”Test1 \“, \ “描述\”:\ “测试1 \”,\ “IsRemoved \”:假,\ “ADDDATE \”:1344969000,\ “LASTUPDATED \”:1344969000},{\ “FaqId \”:2,\“的AppId \ “:65 \” 标题\ “:\” 的Test2 \”,\ “描述\”:\ “的Test2 \”,\ “IsRemoved \”:虚假,\ “ADDDATE \”:1344969000,\ “LASTUPDATED \”: 1344969000}]} \ r \ n]} \ r \ n“是您尝试转换的字符串,然后它实际上不是基本64有效输入。您可以在http://base64converter.com/

创建转换后的版本

答案 2 :(得分:0)

这里有JSON,而不是BASE64。使用JSON反序列化程序,例如JSON.NET

答案 3 :(得分: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文件无法保存,无法读取源。