Heim > Web-Frontend > js-Tutorial > Hauptteil

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

Barbara Streisand
Freigeben: 2024-11-01 13:10:02
Original
452 Leute haben es durchsucht

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

Base64 mithilfe der JavaScript-atob-Funktion dekodieren: 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 mehr als ein Byte in UTF-8-codierten Zeichenfolgen 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:

UTF-8 in Binär kodieren

function toBinary(string) {
  const codeUnits = new Uint16Array(string.length);
  for (let i = 0; i < codeUnits.length; i++) {
    codeUnits[i] = string.charCodeAt(i);
  }
  return btoa(String.fromCharCode(...new Uint8Array(codeUnits.buffer)));
}
Nach dem Login kopieren

Binär in UTF-8 dekodieren

function fromBinary(encoded) {
  const binary = atob(encoded);
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i < bytes.length; i++) {
    bytes[i] = binary.charCodeAt(i);
  }
  return String.fromCharCode(...new Uint16Array(bytes.buffer));
}
Nach dem Login kopieren

Diese Lösung konvertiert die ursprüngliche UTF-8-Zeichenfolge in eine binäre Darstellung, wobei die UTF-16-Kodierung, eine native Darstellung in JavaScript, erhalten bleibt.

Lösung 2: ASCII Base64-Interoperabilität

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

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);
  }));
}
Nach dem Login kopieren

Decodierung von Base64 in UTF-8

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

Diese Lösung verarbeitet effizient UTF-8-codierte Zeichenfolgen, ohne deren 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(''))
}
Nach dem Login kopieren

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 )));
}
Nach dem Login kopieren

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

Das obige ist der detaillierte Inhalt vonWie dekodiere ich Base64-Strings in JavaScript bei gleichzeitiger UTF-8-Codierung?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!