【发布时间】:2016-10-19 03:33:47
【问题描述】:
我们在表单主体中接收来自外部应用程序的 base64 编码字符串,下面是我们用来将字符串解码为字节数组的代码,但是我们遇到了异常
输入字符串
PHBheW1lbnRSZXNwb25zZT48cmVzcG9uc2VDb2RlPjAwMDA8L3Jlc3BvbnNlQ29kZT48cmVzcG9uc2VDb2RlVGV4dD4wLVN1Y2Nlc3NmdWw8L3Jlc3BvbnNlQ29kZVRleHQ + PHJlc3BvbnNlU3VtbWFyeT5HUkVFTjwvcmVzcG9uc2VTdW1tYXJ5PjxwYXltZW50RXZlbnRJZGVudGlmaWVyPlRYTiAzNjM5PC9wYXltZW50RXZlbnRJZGVudGlmaWVyPjxMaXN0Pjxjb21wb25lbnRJRD5UWE4gMzYzOTwvY29tcG9uZW50SUQ + PGNsaWVudElEPkdPVERJU0UwNjwvY2xpZW50SUQ + PGJhbmtBdXRoQ29kZT5UOjEyMzQ8L2JhbmtBdXRoQ29kZT48YnV5bmV0VHhuSUQ + Mzc1PC9idXluZXRUeG5JRD48L0xpc3Q + PHBheW1lbnRJbnN0cnVtZW50UmVmPjwvcGF5bWVudEluc3RydW1lbnRSZWY + PG1hc2tlZENhcmROdW1iZXI + KioqKioqKioqKioqOTY4NjwvbWFza2VkQ2FyZE51bWJlcj48Y2FyZFR5cGU + TUFTVEVSQ0FSRDwvY2FyZFR5cGU + PGV4cGlyeURhdGU + MDMvMjAxNzwvZXhwaXJ5RGF0ZT48Y3VzdG9tRGF0YT4mbHQ7IVtDREFUQVsmbHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI_Jmd0Ow0KJmx0O1RoaXN0bGVDdXN0b21EYXRhIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiJmd0Ow0KICAmbHQ7T3JkZXJJZCZndDtCVFBQMzYzOSZsdDsvT3JkZXJJZCZndDsNCiAgJmx0O0Ftb 3VudCZndDsxMjAmbHQ7L0Ftb3VudCZndDsNCiZsdDsvVGhpc3RsZUN1c3RvbURhdGEmZ3Q7XV0mZ3Q7PC9jdXN0b21EYXRhPjwvcGF5bWVudFJlc3BvbnNlPg
异常
输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、两个以上的填充字符或填充字符中的非法字符。
代码
var inputText = // use the data as shown above
byte[] decodedBytes = Convert.FromBase64String(inputText);
我想知道这有什么问题以及为什么会抛出异常,如果我尝试在线转换器,他们能够返回正确的结果。
【问题讨论】:
-
输入错误。如果我将它放入online decoder 中,我会在一定程度上获得可读的文本/xml 文本,但随后它会退化为胡言乱语。它可能被浏览器或网络服务器损坏(未正确 http 编码?)
-
错误是准确的。您的 base64 文本至少包含下划线 (
_) 字符,这是无效的。你可以试着相信你得到的错误信息。它们通常提供丰富的信息。将_替换为+,它将正确转换。下次,当您收到错误提示您的数据无效时,请检查您的数据。