Fonctions JavaScript atob() et btoa()
Guide de référence rapide pour les fonctions intégrées de JavaScript pour l'encodage et le décodage Base64.
|
btoa() - Encoder en Base64
La fonction `btoa()` crée une chaîne ASCII encodée en Base64 à partir de données binaires.
// Utilisation de base
const encoded = btoa('Hello World');
console.log(encoded); // "SGVsbG8gV29ybGQ="
// Encoder du JSON
const json = JSON.stringify({ name: 'John', age: 30 });
const encodedJson = btoa(json);
console.log(encodedJson); // "eyJuYW1lIjoiSm9obiIsImFnZSI6MzB9"
- > N'accepte que les caractères ASCII (0-255)
- > Lance une erreur pour les caractères Unicode
- > Disponible dans tous les navigateurs modernes et Node.js 16+
atob() - Décoder depuis Base64
La fonction `atob()` décode une chaîne encodée en Base64.
// Utilisation de base
const decoded = atob('SGVsbG8gV29ybGQ=');
console.log(decoded); // "Hello World"
// Décoder du JSON
const decodedJson = atob('eyJuYW1lIjoiSm9obiIsImFnZSI6MzB9');
const data = JSON.parse(decodedJson);
console.log(data); // { name: 'John', age: 30 }
- > Retourne une chaîne binaire
- > Lance une erreur pour un Base64 invalide
- > Entrée sensible à la casse
Gestion d'Unicode
Pour les chaînes Unicode, combinez avec TextEncoder/TextDecoder.
// Encoder Unicode
function encodeUnicode(str) {
const bytes = new TextEncoder().encode(str);
const binString = String.fromCharCode(...bytes);
return btoa(binString);
}
// Décoder Unicode
function decodeUnicode(base64) {
const binString = atob(base64);
const bytes = Uint8Array.from(binString, c => c.charCodeAt(0));
return new TextDecoder().decode(bytes);
}
// Exemple
const encoded = encodeUnicode('你好世界 🌍');
const decoded = decodeUnicode(encoded);
console.log(decoded); // "你好世界 🌍"
Cas d'Usage Courants
Applications pratiques en développement web.
Gestion d'Erreurs
Bonnes pratiques pour un code robuste.
function safeBase64Decode(str) {
try {
return atob(str);
} catch (e) {
console.error('Base64 invalide:', e);
return null;
}
}
function safeBase64Encode(str) {
try {
return btoa(str);
} catch (e) {
// Probablement un problème Unicode
return btoa(unescape(encodeURIComponent(str)));
}
}
Support Navigateurs et Node.js
Disponibilité selon les environnements.
// Alternative Node.js pour versions anciennes
if (typeof btoa === 'undefined') {
global.btoa = (str) => Buffer.from(str, 'binary').toString('base64');
global.atob = (b64) => Buffer.from(b64, 'base64').toString('binary');
}
Conseils de Performance
Optimiser les opérations Base64.
// Comparaison de performance
const cache = new Map();
function cachedBtoa(str) {
if (!cache.has(str)) {
cache.set(str, btoa(str));
}
return cache.get(str);
}
- > Mettre en cache les valeurs encodées pour usage répété
- > Utiliser le streaming pour gros fichiers
- > Considérer des alternatives pour données binaires (ArrayBuffer, Blob)
- > Grouper les opérations quand possible