私はJSでクライアントサイドのコードを書いています。これは、私が一切変更できないサードパーティのC#サービスと互換性があります。javascriptでbase64をエンコードし、cでコードをデコード#
もたらすvar myString = Encoding.Unicode.GetBytes("{\"counter\":0}");
var encodedString = Convert.ToBase64String(myString);
: "ewAiAGMAbwB1AG4AdABlAHIAIgA6ADAAfQA ="
サービスは、これはC#コードである(簡略化)実施例のためにbase64でユニコードエンコードされた文字列(JSON)、 を供給する
byte[] bytes = Convert.FromBase64String(encodedString);
string decodedString = Encoding.Unicode.GetString(bytes);
:
は、今私は、クライアント側では、このエンコードされたJSONを更新し、このC#のコードによってデコードされる有効なbase64文字列を返す必要があります
私がオンラインで見つけたすべてのソリューション/例は、デコード機能が無効な結果を出力する結果となりました。 たとえば、基本window.btoa("{\"counter\":1}")
を使用した場合、eyJjb3VudGVyIjoxfQ==
となり、c#アプリでのデコード時には、最高でフォーマット例外が発生するか、ぎこちなくなります。
どのようなアイデアですか?
'window.btoa'を使うと、UTF8エンコーディングを使用します。ユニコード文字列としてデコードしようとすると、途方もないものになります。 C#変換コードは面白いですが、Unicode入力を与えなければ、 'Encoding.Unicode.GetString'を実行するとクラッシュしてしまいます。 C#コードで 'Unicode'を' UTF8'に変更するとどうなりますか? –
明確にするため、Windows(およびC#)のUnicodeはUTF16-LEを意味します。あなたは、JavaScriptでUTF-16としてエンコードされた文字列を取得する方法を理解する必要があります。 – roeland
もし 'Encoding.UTF8'に変更すれば、デコードはうまく動作します。 しかし、 'Encoding.UTF16'に変更するとクラッシュしました。問題は、私はC#コードを制御することができない、私はJS側でそれを把握する必要がある - –