"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o `atob` do Javascript não consegue decodificar corretamente as strings UTF-8 base64?

Por que o `atob` do Javascript não consegue decodificar corretamente as strings UTF-8 base64?

Publicado em 2024-11-09
Navegar:293

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

O uso do atob do Javascript para decodificar base64 não decodifica corretamente as strings utf-8

O atob do Javascript pode decodificar corretamente as strings base64 que foram codificadas com caracteres ASCII, por exemplo, window.atob('YQ==') retornará o caractere ASCII 'a'. No entanto, ele não decodificará corretamente strings base64 que foram codificadas com caracteres Unicode UTF-8, por exemplo, window.atob('4pyTIMOgIGxhIG1vZGU=') retornará '⢠à la mode' em vez de '✓ à la mode' .

Para decodificar corretamente uma string base64 que foi codificada com UTF-8, precisamos usar as funções escape e unescape. Neste caso, window.atob(unescape(encodeURIComponent('✓ à la mode'))) retornará '4pyTIMOgIGxhIG1vZGU=' e window.atob('4pyTIMOgIGxhIG1vZGU=') retornará '✓ à la mode'.

Outra opção para lidar com o fluxo de entrada codificado em base64 para que seja decodificado como utf-8 é usar a classe TextDecoder. Esta classe fornece uma maneira de decodificar uma string codificada em base64 em uma string UTF-8. Aqui está um exemplo de como usá-lo:

const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3