Die Verwendung von Javascripts atob zum Dekodieren von Base64 dekodiert UTF-8-Zeichenfolgen nicht richtig.
Die Funktion window.atob() in JavaScript funktioniert nicht Beim Umgang mit Zeichen, die mehr als ein Byte belegen, können UTF-8-Zeichenfolgen nicht korrekt dekodiert werden, was stattdessen zu ASCII-kodierten Zeichen führt.
Unicode-Problem
JavaScript-Zeichenfolgen werden kodiert in 16-Bit-Einheiten und btoa() erwartet Binärdaten als Eingabe. Zeichen, die mehr als ein Byte belegen, wie etwa Sonderzeichen oder Fremdzeichen, gelten nicht als Binärdaten und lösen bei der Übergabe an btoa() einen Fehler aus. Dieses Problem ist als „Unicode-Problem“ bekannt.
Lösung mit binärer Interoperabilität
Die von MDN empfohlene Lösung umfasst die Kodierung und Dekodierung aus einer binären Zeichenfolgendarstellung. Dadurch bleibt die binäre Natur der Daten erhalten und das Unicode-Problem wird beseitigt. Der Kodierungsprozess umfasst die Konvertierung der UTF-8-Zeichenfolge in eine Binärzeichenfolge mit Uint16Array und Uint8Array. Beim Dekodieren wird die Binärzeichenfolge zurück in eine UTF-8-Zeichenfolge umgewandelt.
Lösung mit ASCII Base64-Interoperabilität
Eine andere Lösung besteht darin, die UTF-16-DOM-Zeichenfolge in eine 8 umzuwandeln -Bit-Integer-Array von Zeichen mit Uint8Array und kodieren Sie es dann mit btoa(). Diese Methode behält die UTF-8-Funktionalität bei und erzeugt Base64-Textzeichenfolgen, die auf Plattformen dekodiert werden können, die UTF-8 unterstützen. Beim Dekodieren wird der Base64-String mit atob() und decodeURIComponent() zurück in einen UTF-8-String konvertiert.
Veraltete Lösung
Eine zuvor verwendete Lösung beinhaltete die Verwendung von Escape( ) und unescape()-Funktionen, die inzwischen veraltet sind. Obwohl diese Methode in modernen Browsern immer noch funktioniert, wird ihre Verwendung nicht empfohlen.
Darüber hinaus ist zu beachten, dass Sie bei der Arbeit mit der GitHub-API möglicherweise Leerzeichen aus der Base64-Quelle entfernen müssen, bevor Sie sie dekodieren, damit sie ordnungsgemäß funktioniert Mobile Safari.
Das obige ist der detaillierte Inhalt vonWarum kann „atob()' UTF-8-Strings in JavaScript nicht dekodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!