# Da immagine a Base64 e da JWT a JSON: 6 conversioni in browser

> 6 encoder e decoder online: Base64 (RFC 4648), URL (RFC 3986), HTML entities, JWT decode, Unicode escape, immagine in Data URI.

Strumento gratuito nel browser (nessun upload): https://www.mauriziofonte.it/strumenti/encoder-decoder-online

Sei encoder/decoder in un'unica pagina: **Base64** (RFC 4648), **URL encoding** (RFC 3986), **HTML entities**, **Unicode escape**, **JWT decode** (lettura claim, niente verify firma), **immagine in Data URI**.

## Come usare l'encoder/decoder

1. **Scegli il tab** - Ogni tab è una funzione indipendente: Base64, URL, HTML entities, Unicode, JWT, Immagine to Data URI. Le opzioni specifiche (URL-safe, named/numeric entities) appaiono nel tab pertinente.
2. **Incolla l'input o trascina il file** - Per i tab testuali, incolla nell'area di input. Per l'image-to-data-uri, trascina un'immagine (PNG, JPEG, GIF, WebP, SVG) sulla dropzone o usa il file picker.
3. **Codifica o decodifica** - I primi cinque tab hanno entrambe le direzioni. L'image tab è a senso unico (file binario verso Data URI testuale). Per ricavare il file dal Data URI, basta incollarlo nella barra del browser.
4. **Copia o scambia** - Il pulsante Copia porta il risultato nel clipboard. Il pulsante Scambia I/O sposta l'output nell'input, utile per encoding/decoding ripetuti (es. Base64 di Base64, comune in payload nested).

## Sei strumenti in un solo tab

**Operazioni quotidiane in un solo posto.** Decodifica Base64, URL encoding, escape HTML, escape JSON, conversione UTF-8 e visualizzazione di Data URI sono operazioni che ogni sviluppatore fa più volte al giorno. Averle tutte già caricate nello stesso tab elimina lo switch fra strumenti diversi e l'overhead del primo caricamento di una pagina web ogni volta.

**Image-to-Data-URI direttamente nel browser.** Molti tool web simili caricano il file su un server, lo convertono e restituiscono il Data URI: l'immagine sensibile (screenshot di prodotto, logo non ancora pubblicato, foto personale) transita per un backend di terze parti. Qui il file viene letto via `FileReader.readAsDataURL()` direttamente nel browser, senza trasferimento esterno. Il limite di 10 MB è impostato per evitare freeze del tab in caso di drop accidentale di un file enorme; con macchine recenti potresti tecnicamente arrivare a 50-100 MB.

**JWT decode in lettura.** Il tool decodifica header e payload (Base64URL, claim JSON) ma **non verifica la firma**: la verifica richiederebbe il secret HMAC o la chiave pubblica RSA/ECDSA del backend, che non hanno motivo di transitare in un'utility generica. Per la verifica firma HS256 in WebCrypto e per il claim explainer dedicato c'è il [JWT decoder](/strumenti/jwt-decoder); per l'audit di sicurezza completo (alg=none, weak HS256, claim mancanti, lifetime troppo lungo, kid injection) il tool dedicato è l'[audit JWT](/strumenti/audit-jwt).

## Glossario

- **Base64**: Codifica binary-to-text con alfabeto di 64 caratteri (A-Z, a-z, 0-9, +, /). RFC 4648. Ratio overhead: 33% (3 byte input -> 4 char output).
- **Base64URL**: Variante di Base64 url-safe (RFC 4648 §5): + sostituito da -, / sostituito da _, padding = opzionale. Usato in JWT e in molti API token.
- **URL encoding**: Conversione di caratteri non-ASCII e riservati in sequenze %HH (RFC 3986). Sotto-categorie: encodeURI (preserva caratteri di sintassi URL), encodeURIComponent (encoda anche : / ? # &).
- **HTML entities**: Rappresentazione testuale di caratteri Unicode in HTML: nominate (`&eacute;`) o numeriche (`&#233;`, `&#xe9;`). HTML5 ha ~2200 entità nominate definite nel WHATWG spec.
- **Data URI**: URI che incapsula direttamente i dati nel scheme (RFC 2397): `data:[mime];base64,[payload]`. Sostituisce un fetch separato del file, comodo per piccoli asset (icone, font subset, badge). Limit pratico: 32 KB su Internet Explorer, 256 KB su Chrome/Firefox.
- **JWT**: JSON Web Token (RFC 7519): tre segmenti Base64URL separati da punto. Header: algoritmo + tipo. Payload: claim (iss, sub, exp, iat...). Signature: firma HMAC o RSA/ECDSA. La decodifica della parte non-signature è triviale e non implica autenticità.

## Domande frequenti

### Le immagini che converto in Data URI vengono caricate sul server?

No. Il browser legge il file con `FileReader.readAsDataURL()`, ottiene la stringa Data URI in memoria e la mostra direttamente; nessun trasferimento al server avviene durante l'operazione.

### Il JWT decoder verifica la firma?

No, deliberatamente. La verifica richiede la chiave (HMAC secret o public key RSA/ECDSA) che non ha senso passare a un tool web. La verifica firma è un'operazione che si fa lato applicazione consumer, non in un decoder generico. Per un audit di sicurezza JWT completo, vedi il tool dedicato Audit JWT.

### C'è una dimensione massima per l'input testuale?

Non imposta dal tool. Il limite è la memoria del tab del browser. Per Base64 di file binari (es. PDF) consigliamo di incollare al massimo qualche MB per fluidità UI. Per file grandi, un comando shell è più efficiente: `base64 -w 0 file.pdf` su Linux/macOS, `certutil -encode file.pdf out.txt` su Windows.

### Perché la decodifica HTML entity non riconosce alcune entità nominate?

L'HTML5 spec definisce ~2200 entità nominate. Il browser nativo (via DOM parsing) le supporta tutte, ma noi usiamo una mappa manuale per evitare il side-effect del DOM. Le entità supportate coprono il 99% dei casi (Latin Extended, simboli matematici, simboli tipografici, freccette). Per copertura completa: incolla il testo in HTML, includilo come `innerHTML` di un nodo, leggine `textContent` nei DevTools del browser.

### Differenza pratica tra encodeURI e encodeURIComponent?

`encodeURI` preserva i caratteri di sintassi URL (`: / ? # & = +`). Usalo quando hai già una URL formata e devi rendere safe i parametri letterali. `encodeURIComponent` encoda anche quei caratteri. Usalo per encodare un singolo valore di query string (e.g. `q=tutto&amp;ok` diventa `q=tutto%26amp%3Bok`).

### Posso usare questo tool per credenziali o secret in produzione?

Per generare/decodificare token o secret di test in locale: si, è privato by design. Per ruotare credenziali in produzione: il flusso giusto è un secret manager (Vault, AWS Secrets Manager, Doppler). Un tool web non lascia traccia, ma se inserisci un secret di prod nel campo, non torna indietro. Discrezione operativa.

### Funziona su Safari iOS?

Si. Tutte le API usate (FileReader, atob, btoa, TextEncoder, encodeURI/encodeURIComponent) sono supportate da Safari iOS 11+. Drag-and-drop su iOS funziona dalla photo picker della tastiera, non dal file system come su desktop. Click sulla dropzone apre il picker nativo.

### Esiste un'API endpoint per chiamare le funzioni da uno script?

No, e non ne aggiungeremo: tutto è per scelta. Per script: in Node.js/PHP usa le API native (`Buffer.from(s, 'base64')`, `base64_encode()`). Sono tre righe, nessuna ragione di incapsularle in una API HTTP.

---
Uno strumento di Maurizio Fonte, senior backend engineer. Tutti gli strumenti: https://www.mauriziofonte.it/strumenti/
