我在使用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。
这告诉我,复制的行为正在改变字符串。
发布于 2014-08-29 16:09:03
上述问题似乎与文件大小问题有关。
如上所述,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(...)的问题,那么您应该尝试一下这个解决方案。
https://stackoverflow.com/questions/25556517
复制相似问题