Ich schreibe einen Client-Side-Code in JS, die mit einem C# -Service von Drittanbietern kompatibel sein sollte, die ich überhaupt nicht ändern kann.kodieren Sie Basis 64 in Javascript, entschlüsseln Unicode in C#
Der Dienst liefert ein Base64 Unicode codierte Zeichenfolge (a JSON), zum Zwecke des (vereinfachtes) Beispiel Dies ist der C# Code:
var myString = Encoding.Unicode.GetBytes("{\"counter\":0}");
var encodedString = Convert.ToBase64String(myString);
was dazu führt: "ewAiAGMAbwB1AG4AdABlAHIAIgA6ADAAfQA ="
jetzt brauche ich auf der Client-Seite dieses codierte JSON zu aktualisieren, und geben eine gültige base64 Zeichenfolge, die durch diese C# Code dekodiert werden:
byte[] bytes = Convert.FromBase64String(encodedString);
string decodedString = Encoding.Unicode.GetString(bytes);
Alle Lösungen/Beispiele, die ich online gefunden habe, führten zu den Decodierungsfunktionen, um ein ungültiges Ergebnis auszugeben. zum Beispiel, wenn Sie die grundlegende window.btoa("{\"counter\":1}")
in eyJjb3VudGVyIjoxfQ==
Ergebnis, die wiederum, wenn die Entschlüsselung auf der C# -App, wird verursachen eine Format Ausnahme bestenfalls, oder führen zu insgesamt Kauderwelsch.
irgendwelche Ideen?
Wenn Sie 'window.btoa' verwenden, verwendet es die UTF8-Codierung, wenn Sie versuchen, es als Unicode-Zeichenfolge zu dekodieren, wird es natürlich als Kauderwelsch enden. Der C# -Konvertierungscode macht Spaß, aber wenn Sie ihn nicht als Unicode-Eingabe angeben, stürzt er natürlich ab, wenn Sie 'Encoding.Unicode.GetString' ausführen. Was passiert, wenn Sie im C# -Code "Unicode" in "UTF8" ändern? –
Zur Verdeutlichung bedeutet Unicode unter Windows (und C#) UTF16-LE. Sie müssen herausfinden, wie man eine Zeichenkette, die als UTF-16 codiert ist, in Javascript erhält. – roeland
Nun, wenn ich es zu "Encoding.UTF8" ändern, dann funktioniert die Decodierung gut. Aber wenn ich es in 'Encoding.UTF16' ändere, stürzte es ab. Das Problem ist, dass ich keine Kontrolle über den C# -Code habe, ich muss es auf der JS-Seite herausfinden - –