Maison  >  Article  >  interface Web  >  Pourquoi « atob » de Javascript ne parvient-il pas à décoder correctement les chaînes UTF-8 base64 ?

Pourquoi « atob » de Javascript ne parvient-il pas à décoder correctement les chaînes UTF-8 base64 ?

DDD
DDDoriginal
2024-11-01 23:10:29379parcourir

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

L'utilisation de l'atob de Javascript pour décoder la base64 ne décode pas correctement les chaînes utf-8

L'atob de Javascript peut décoder correctement les chaînes base64 qui ont été codées avec des caractères ASCII, par exemple, window.atob('YQ==') renverra le Caractère ASCII 'a'. Cependant, il ne décodera pas correctement les chaînes base64 qui ont été codées avec des caractères Unicode UTF-8. Par exemple, window.atob('4pyTIMOgIGxhIG1vZGU=') renverra « ⢠à la mode » au lieu de « ✓ à la mode ». .

Pour décoder correctement une chaîne base64 qui a été codée avec UTF-8, nous devons utiliser les fonctions escape et unscape fonctions. Dans ce cas, window.atob(unescape(encodeURIComponent('✓ à la mode'))) renverra '4pyTIMOgIGxhIG1vZGU=' et window.atob('4pyTIMOgIGxhIG1vZGU=') renverra '✓ à la mode'.

Une autre option pour gérer le flux entrant encodé en base64 afin qu'il soit décodé comme utf-8 consiste à utiliser la classe TextDecoder. Cette classe fournit un moyen de décoder une chaîne codée en base64 en une chaîne UTF-8. Voici un exemple de comment l'utiliser :

<code class="javascript">const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn