Convert.FromBase64String奇怪的问题

使用Convert.FromBase64String时,我有一个FormatException

我已经检查过x.length % 4 == 0否则我会相应地填充。

我确保没有无效字符。

奇怪的是,当我将其复制并粘贴回即时窗口或外部转换器时,一切正常。

在搜索上述观点时,我发现这种行为的一个常见原因是隐藏的换行符/n 。 在该示例中,当代码尝试解析其失败的值时,因为存在无效字符。 但是,通过复制到记事本,删除了不可见的字符,并从那里正常工作。 这个问题似乎与上述非常相似; 但是,我已经validation我的值没有隐藏的换行符。

你能想到复制和粘贴会起作用的任何其他原因,但是使用代码中的数据却不行吗? 我的想法是必须有另一个角色,或者我不容易看到的东西。

对于参考,产生问题的行是:

 data.Data = Convert.FromBase64String(report.Content.ContentValue); 

该report.Content.ContentValue价值的截断版本是"JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCA1MzIzDQovRmlsdGVyIC9GbGF0ZURlY29kZQ0‌​KPj4NCnN0cmVhbQ0KWIXtvQdgHEmWJSYvbcp7f0r1Stfg ... trimmed ... g0KPDwgDQovU2l6ZSAxMDcNCi9JbmZvIDEwNiAwIFINCi9Sb290IDUyIDAgUg0KPj4NCnN0YXJ0eHJlZ‌​g0KMzM2MDU4OQ0KJSVFT0Y="

任何想法都会有所帮助,谢谢。

更新如果我将问题(x)中的值复制到我的剪贴板,并将以下内容放入即时窗口,这也很有趣

 ?x == "JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCA1MzIzDQovRmlsdGVyIC9GbGF0ZURlY29kZQ0‌​KPj4NCnN0cmVhbQ0KWIXtvQdgHEmWJSYvbcp7f0r1Stfg ... trimmed ... g0KPDwgDQovU2l6ZSAxMDcNCi9JbmZvIDEwNiAwIFINCi9Sb290IDUyIDAgUg0KPj4NCnN0YXJ0eHJlZ‌​g0KMzM2MDU4OQ0KJSVFT0Y=" 

其中JVBER...部分是我复制到剪贴板的x的值。

即时窗口返回FALSE

这告诉我复制的行为是改变字符串。

上述问题似乎与文件大小问题有关。

如上所述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(...)那么您应该尝试使用此解决方案。