C# Base64Encode中出错。Base-64字符数组或字符串的长度无效

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 (

我想用下面的C代码解码一些字符串:

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块比无意义块更糟糕——它删除了堆栈跟踪,这将非常有用。只要摆脱它,把你的方法变成一个两行的方法。。。