2016-11-21 18 views
-1

ためbase64EncodeInvalid長でエラーが発生しました私は、次のC#コードを使用することによって、いくつかの文字列をデコードします:ベース64 char配列や文字列

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: 

誰がどのようにこの問題を解決するために私を伝えることができますか?

+1

これは、有効なbase64文字列ではありません。それは257文字です。それは有効なbase64になるためには詰め物が必要です...あなたはどこから始めましたか?さて、あなたのtry/catchブロックは無意味なものより悪いです - それは有用であろうスタックトレースを削除しています。ちょうどそれを取り除き、あなたの方法を2行の方法に変えてください... –

答えて

1

あなたの文字列は有効なbase64文字列ではありません。 base64の詳細については、上記のリンクを確認してください。

あなたは簡単に文字列の長さをカウントすることでこれを確認することができます:あなたはウィキペディアのページから見ることができるように

Console.WriteLine("H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Il5mdbvM6/SLvGmyizx9lU/z4jKf/czLYpWXxTL/md/7i+f64ZNs8abOpm+L5cXPPH69+HKVL39yL323KJfNo3fN7LOP5m27enT37tXV1fjq3riqL".Length); 

この意志の出力値が「257」は、それはそれの長さの有効beacuseではありません。 :)

希望はあなたを助けるでしょう。

関連する問題