Heim > Artikel > Web-Frontend > Wie dekodiere ich Base64-Strings in JavaScript bei gleichzeitiger UTF-8-Codierung?
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.
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.
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))); }
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)); }
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.
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); })); }
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('')); }
Diese Lösung verarbeitet effizient UTF-8-codierte Zeichenfolgen, ohne deren Darstellung zu ändern.
// 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('')) }
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 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!