我在JS中編寫客戶端代碼,它應該與我無法修改的第三方c#服務兼容。在javascript中編碼base 64,在c中解碼unicode
該服務提供一個base64 的unicode編碼的字符串(一個JSON), 對於(簡化的)實施例,這是C#代碼的緣故:
var myString = Encoding.Unicode.GetBytes("{\"counter\":0}");
var encodedString = Convert.ToBase64String(myString);
這導致: 「ewAiAGMAbwB1AG4AdABlAHIAIgA6ADAAfQA =」
現在我需要更新的客戶端這個編碼的JSON,並返回其將在本C#代碼進行解碼有效的base64字符串:
byte[] bytes = Convert.FromBase64String(encodedString);
string decodedString = Encoding.Unicode.GetString(bytes);
我在網上找到的所有解決方案/示例導致解碼功能輸出無效結果。例如,當使用基本的window.btoa("{\"counter\":1}")
導致eyJjb3VudGVyIjoxfQ==
,這反過來,當在c#應用上解碼時,將導致格式異常充其量,或導致總亂碼。
任何想法?
當使用'window.btoa'時,它使用UTF8編碼,當你試圖將它解碼爲Unicode字符串時,它最終會變成亂碼。 C#轉換代碼很有趣,但是如果你沒有提供Unicode輸入,它會在執行'Encoding.Unicode.GetString'時崩潰。在C#代碼中將「Unicode」更改爲「UTF8」會發生什麼? –
爲了清楚起見,Windows(和C#)下的Unicode表示UTF16-LE。你必須弄清楚如何在javascript中獲得一個以UTF-16編碼的字符串。 – roeland
那麼,如果我將它改爲'Encoding.UTF8',那麼解碼工作正常。 但是,如果我將其更改爲'Encoding.UTF16',它會崩潰。問題是我無法控制C#代碼,我需要在JS端弄清楚它 - –