"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué `atob` de Javascript no logra decodificar cadenas UTF-8 base64 correctamente?

¿Por qué `atob` de Javascript no logra decodificar cadenas UTF-8 base64 correctamente?

Publicado el 2024-11-09
Navegar:881

Why does Javascript\'s `atob` fail to decode UTF-8 base64 strings properly?

El uso de atob de Javascript para decodificar base64 no decodifica correctamente cadenas utf-8

El atob de Javascript puede decodificar correctamente cadenas base64 que han sido codificadas con caracteres ASCII, por ejemplo, window.atob('YQ==') devolverá el carácter ASCII 'a'. Sin embargo, no decodificará correctamente cadenas base64 que hayan sido codificadas con caracteres UTF-8 Unicode; por ejemplo, window.atob('4pyTIMOgIGxhIG1vZGU=') devolverá '⢠à la mode' en lugar de '✓ à la mode'. .

Para decodificar correctamente una cadena base64 que ha sido codificada con UTF-8, necesitamos usar las funciones escape y unescape. En este caso, window.atob(unescape(encodeURIComponent(' ✓ à la mode'))) devolverá '4pyTIMOgIGxhIG1vZGU=' y window.atob('4pyTIMOgIGxhIG1vZGU=') devolverá ' ✓ à la mode'.

Otra opción para manejar la transmisión entrante codificada en base64 para que se decodifique como utf-8 es utilizar la clase TextDecoder. Esta clase proporciona una manera de decodificar una cadena codificada en base64 en una cadena UTF-8. Aquí hay un ejemplo de cómo usarlo:

const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3