Heim > Web-Frontend > js-Tutorial > Warum kann „atob()' UTF-8-Strings in JavaScript nicht dekodieren?

Warum kann „atob()' UTF-8-Strings in JavaScript nicht dekodieren?

Susan Sarandon
Freigeben: 2024-11-02 09:35:30
Original
348 Leute haben es durchsucht

Why Does `atob()` Fail to Decode UTF-8 Strings in JavaScript?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage