Come codificate una stringa in base64 con Node.js? C’è qualcosa di abbastanza semplice come la funzione base64_encode() di PHP?

Node.js ha un approccio più logico alla codifica delle stringhe piuttosto che avere migliaia di funzioni incosistenti definite nello scope globale.
Ecco come codificare del semplice testo in base64 con Node:

var b = new Buffer('ciao');
var s = b.toString('base64');
// Y2lhbw==

Ed ecco come invece si decodifica una stringa base64:

var b = new Buffer('Y2lhbw==', 'base64')
var s = b.toString();
// ciao

Seguitemi dunque se siete interessati ai dettagli di come funziona l’esempio sopra.

Il metodo costruttore di Buffer() richiede un number, array o string come primo parametro, e una codifica opzionale come secondo parametro.
Le tipologie di codifiche supportate sono: ascii, utf8, ucs2, base64, binary, ed hex. Di default viene usata utf8.

Una volta che abbiamo la stringa codificata possiam chiamare il metodo toString() sul buffer. Se non passiamo la codifica al metodo, javascript assume che vogliam effettuare una conversione dell’oggetto in stringa con codifica utf8.

Codifichiamo una stringa base64 in esadecimale:

var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString('hex');
// 4a617661536372697074

Ora decodifichiamola in qualcosa che anche un essere umano può leggere:

var b = new Buffer('4a617661536372697074', 'hex')
var s = b.toString('utf8');
// JavaScript

Una volta padroneggiati i Buffer e le codifiche, si può portare questo concetto a livello di file system, operando direttamente con i file.

In questo ben-commentato esempio convertiamo un’immagine in base64, ed effettuiamo una copia di quest’ultima direttamente dalla sua codifica base64.

var fs = require('fs');
 
// funzione per codificare un file in stringa base64
function base64_encode(file) {
    // leggiamo il file binario
    var bitmap = fs.readFileSync(file);
    // convertiamo il binario in stringa codificata in base64.
    return new Buffer(bitmap).toString('base64');
}
 
// funzione per creare un file da una stringa base64.
function base64_decode(base64str, file) {
    // Creiamo un oggetto di tipo Buffer da una stringa base64.
    // E' importante specificare al costruttore che si tratta di codifica base64.
    var bitmap = new Buffer(base64str, 'base64');
    // scriviamo il buffer su file
    fs.writeFileSync(file, bitmap);
    console.log('******** File created from base64 encoded string ********');
}
 
// convertiamo l'immagine in stringa base64.
var base64str = base64_encode('kitten.jpg');
console.log(base64str);
// convertiamo la stringa base64 nuovamente in immagine 
base64_decode(base64str, 'copy.jpg');

Divertitevi con le codifiche adesso.
PS. utf8 è un superset di ascii, limitato ai classici caratteri da tastiera Inglese. Se avete a che fare con simboli “esotici”, come ⌘, こんにちは, Üdvözöljük etc. usate utf.