C# Base64Encode中出错。Base-64字符数组或字符串的长度无效
我想用下面的C代码解码一些字符串:C# Base64Encode中出错。Base-64字符数组或字符串的长度无效,c#,C#,我想用下面的C代码解码一些字符串: public static string deCodeStdXML(string encodeXML) { string str2; try { byte[] data = System.Convert.FromBase64String(encodeXML); str2 = System.Text.ASCIIEncoding.ASCII.GetString(data); } catch (
public static string deCodeStdXML(string encodeXML)
{
string str2;
try
{
byte[] data = System.Convert.FromBase64String(encodeXML);
str2 = System.Text.ASCIIEncoding.ASCII.GetString(data);
}
catch (Exception exception)
{
throw new Exception("Error in base64Encode" + exception.Message);
}
return str2;
}
但当我用长字符串测试它时,它不起作用,请参见以下内容:
string encodeXML = @"H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Il5mdbvM6/SLvGmyizx9lU/z4jKf/czLYpWXxTL/md/7i+f64ZNs8abOpm+L5cXPPH69+HKVL39yL323KJfNo3fN7LOP5m27enT37tXV1fjq3riqL";
string result = deCodeStdXML(encodeXML);
Console.WriteLine(result);
它抛出异常:
System.Exception was unhandled
HResult=-2146233088
Message=Error in base64EncodeInvalid length for a Base-64 char array or string.
Source=HarnessDBLayer
StackTrace:
at HarnessDBLayer.DBHelper.deCodeStdXML(String encodeXML) in c:\Users\zhanzhex\Documents\Visual Studio 2012\Projects\XMLValidation\HarnessDBLayer\DBLayer.cs:line 602
at ConsoleApplication1.Program.TEST_deCodeStdXML() in c:\Users\zhanzhex\Documents\Visual Studio 2012\Projects\XMLValidation\ConsoleApplication1\Program.cs:line 43
at ConsoleApplication1.Program.Main(String[] args) in c:\Users\zhanzhex\Documents\Visual Studio 2012\Projects\XMLValidation\ConsoleApplication1\Program.cs:line 22
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
有人能告诉我如何解决这个问题吗?您的字符串不是有效的字符串。 有关base64的更多信息,请查看上面的链接 您可以通过计算字符串长度来轻松检查这一点:
Console.WriteLine("H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Il5mdbvM6/SLvGmyizx9lU/z4jKf/czLYpWXxTL/md/7i+f64ZNs8abOpm+L5cXPPH69+HKVL39yL323KJfNo3fN7LOP5m27enT37tXV1fjq3riqL".Length);
这将输出值“257”,因此您可以从wikipedia页面上看到,由于其长度,该值无效。:)
希望这能对您有所帮助。好吧,这根本不是有效的base64字符串。它有257个字符长。它需要填充为有效的base64。。。你从哪里开始的?另一方面,try/catch块比无意义块更糟糕——它删除了堆栈跟踪,这将非常有用。只要摆脱它,把你的方法变成一个两行的方法。。。