使用FormatException
Convert.FromBase64String
我查了x.length % 4 == 0
否则我会相应填写。
我确保没有无效字符。
奇怪的是,当我将其复制并粘贴回即时窗口或外部转换器时,一切正常。
在搜索上述观点时,我发现此行为的一个常见原因涉及隐藏的换行符/n
。
在该示例中,当代码尝试解析其失败的值时,因为存在无效字符。但是,通过复制到记事本,删除了不可见的字符,并从那里正常工作。
这个问题似乎与上述非常相似;但是,我已经确认我的值没有隐藏的换行符。
你能想到复制和粘贴会起作用的任何其他原因,但是使用代码中的数据却没有吗?我的想法是必须有另一个角色,或者我不容易看到的东西。
供参考, 产生问题的那一行是:
data.Data = Convert.FromBase64String(report.Content.ContentValue);
report.Content.ContentValue的截断版本值为"JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCA1MzIzDQovRmlsdGVyIC9GbGF0ZURlY29kZQ0KPj4NCnN0cmVhbQ0KWIXtvQdgHEmWJSYvbcp7f0r1Stfg ... trimmed ... g0KPDwgDQovU2l6ZSAxMDcNCi9JbmZvIDEwNiAwIFINCi9Sb290IDUyIDAgUg0KPj4NCnN0YXJ0eHJlZg0KMzM2MDU4OQ0KJSVFT0Y="
任何想法都会有所帮助,谢谢。
更新 如果我将问题(x)中的值复制到剪贴板中,并将以下内容放入即时窗口中,这也很有趣
?x == "JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCA1MzIzDQovRmlsdGVyIC9GbGF0ZURlY29kZQ0KPj4NCnN0cmVhbQ0KWIXtvQdgHEmWJSYvbcp7f0r1Stfg ... trimmed ... g0KPDwgDQovU2l6ZSAxMDcNCi9JbmZvIDEwNiAwIFINCi9Sb290IDUyIDAgUg0KPj4NCnN0YXJ0eHJlZg0KMzM2MDU4OQ0KJSVFT0Y="
其中JVBER...
部分是我复制到剪贴板的x的值。
即时窗口返回FALSE
。
这告诉我复制的行为是改变字符串。
答案 0 :(得分:0)
上述问题似乎与文件大小问题有关。
如上所述Convert.FromBase64String(report.Content.ContentValue);
最初没有起作用;但是,通过将report.Content.ContentValue
分成四个较小的部分,调整填充,转换然后将结果合并到一个数据数组中,我能够产生预期的结果。
foreach (string partialInput in splitInputArray)
{
string paddedPartialInput = partialInput;
int lengthAdjustment = partialInput.Length % 4;
if (lengthAdjustment > 0) //do we need to fix the padding
paddedPartialInput = paddedPartialInput.PadRight(paddedPartialInput.Length + (4- lengthAdjustment), '=');
repairedOutput = MergeByteArrays(repairedOutput, Convert.FromBase64String(paddedPartialInput));
}
我仍然不明白为什么Convert.FromBase64String(...)
没有完全投入;但是,如果您发现自己遇到大文件和Convert.FromBase64String(...)
的问题,那么您应该尝试使用此解决方案。