Convert.FromBase64String奇怪的问题

时间:2014-08-28 19:24:46

标签: c# base64

使用FormatException

时,我有Convert.FromBase64String

我查了x.length % 4 == 0 否则我会相应填写。

我确保没有无效字符。

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

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

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

供参考, 产生问题的那一行是:

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

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

1 个答案:

答案 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(...)的问题,那么您应该尝试使用此解决方案。