„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie dekodiere ich Base64-Strings in JavaScript bei gleichzeitiger UTF-8-Codierung?

Wie dekodiere ich Base64-Strings in JavaScript bei gleichzeitiger UTF-8-Codierung?

Veröffentlicht am 09.11.2024
Durchsuche:318

How to Decode Base64 Strings in JavaScript While Handling UTF-8 Encoding?

Base64 mit JavaScript dekodieren atob-Funktion: Umgang mit UTF-8

Die atob()-Funktion von JavaScript dient zum Dekodieren von Base64-kodierten Zeichenfolgen. Benutzer können beim Dekodieren von UTF-8-kodierten Zeichenfolgen auf Probleme stoßen, was zu ASCII-kodierten Zeichen anstelle der korrekten UTF-8-Darstellung führt.

Herausforderung: Das Unicode-Problem verstehen

Base64 erwartet Binärdaten als Eingabe , und JavaScript betrachtet Zeichenfolgen, deren Zeichen ein Byte belegen, als Binärdaten. Zeichen, die in UTF-8-codierten Zeichenfolgen mehr als ein Byte belegen, lösen jedoch Ausnahmen während der Codierung aus.

Lösung 1: Binäre Interoperabilität

Die empfohlene Lösung besteht darin, binäre Zeichenfolgen zu codieren und zu decodieren:

Kodierung von UTF-8 in Binärfunktion

function toBinary(string) {
  const codeUnits = new Uint16Array(string.length);
  for (let i = 0; i 

Binär nach UTF-8 dekodieren

function fromBinary(encoded) {
  const binary = atob(encoded);
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i 

Diese Lösung konvertiert die ursprüngliche UTF-8-Zeichenfolge in eine binäre Darstellung und behält dabei die UTF-16-Kodierung, eine native Darstellung in JavaScript, bei.

Lösung 2: ASCII Base64-Interoperabilität

Eine alternative Lösung, die sich auf die UTF-8-Interoperabilität konzentriert, besteht darin, Klartext base64 beizubehalten strings:

Codierung von UTF-8 in Base64

function b64EncodeUnicode(str) {    
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
    function toSolidBytes(match, p1) {
      return String.fromCharCode('0x'   p1);
  }));
}

Base64 in UTF-8 dekodieren

function b64DecodeUnicode(str) {
  return decodeURIComponent(atob(str).split('').map(function(c) {
    return '%'   ('00'   c.charCodeAt(0).toString(16)).slice(-2);
  }).join(''));
}

Diese Lösung verarbeitet UTF-8-codierte Zeichenfolgen effizient, ohne ihre Darstellung zu ändern.

TypeScript-Unterstützung

// Encoding UTF-8 ⇢ base64

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode(parseInt(p1, 16))
    }))
}

// Decoding base64 ⇢ UTF-8

function b64DecodeUnicode(str) {
    return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
        return '%'   ('00'   c.charCodeAt(0).toString(16)).slice(-2)
    }).join(''))
}

Historische Lösung (veraltet)

function utf8_to_b64( str ) {
  return window.btoa(unescape(encodeURIComponent( str )));
}

function b64_to_utf8( str ) {
  return decodeURIComponent(escape(window.atob( str )));
}

Obwohl dieser Ansatz noch funktionsfähig ist, ist er in modernen Browsern mittlerweile veraltet.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3