Vai al contenuto principale
CuteJSON
↑↓ Naviga Enter Seleziona Esc Chiudi

Come codificare JSON in Base64 senza rompersi su accenti o emoji

Pubblicato 2 min di lettura Di Akash Kinkar Pandey

Base64 esiste per trasportare byte attraverso qualcosa che gestisce solo testo, ed e per questo che appare nei URL di dati, negli allegati di posta, nei JSON Web Tokens, e in qualsiasi formato di configurazione che deve contenere un intero documento in un singolo valore stringa.

Il bug che hanno la maggior parte degli strumenti Base64 del browser

La funzione integrata btoa del browser rifiuta qualsiasi cosa sopra il punto di codice U+00FF. Nel momento in cui il tuo JSON contiene una lettera con accento, un simbolo di valuta o un emoji, btoa lancia un errore, ed e per questo che tanti strumenti Base64 rapidi si rompono all istante quando il testo del mondo reale li tocca.

Utilizzo del convertitore JSON a Base64

Questo strumento codifica prima in byte UTF-8, che e cio che fanno tutti gli altri linguaggi e tutti i server, quindi il risultato corrisponde a quello che un backend produrrebbe per lo stesso documento. Codificare

{"name":"café","price":"₹500","clef":"𝄞"}

produce una stringa Base64 che decodifica, attraverso il proprio atob standard del browser e TextDecoder, fino al documento originale esatto: café, ₹500 e il simbolo musicale 𝄞 sopravvivono tutti, incluso quell ultimo carattere, che necessita di una coppia sostitutiva in JavaScript e quattro byte in UTF-8.

Tre fallimenti, distinguiuti

La decodifica puo fallire in tre modi genuinamente diversi, e raggrupparli tutti come “input non valido” nasconde quale stai guardando:

  1. Non e affatto Base64. Un carattere fuori dall alfabeto Base64 viene nominato direttamente: This is not Base64: "!" is not a Base64 character, con la posizione.
  2. Base64 valido, ma i byte non sono testo. La stringa decodifica bene come byte, ma quei byte non sono UTF-8 valido, il che di solito significa che hai Base64 di un file binario invece che di un documento.
  3. Testo valido, ma non e JSON. Il Base64 si e decodificato perfettamente in una stringa, e quella stringa non e un documento JSON, segnalato con lo stesso tipo di messaggio che il formatore e il validatore danno per JSON rotto.

Quale formato accetta

La decodifica tollera un prefisso URL data:, interruzioni di riga dentro il testo Base64, e l alfabeto sicuro per gli URL che sostituisce - e _ con + e /. Incolla direttamente un URL di dati copiato dalla scheda rete di un browser; il prefisso viene rimosso automaticamente.

Questa e crittografia

No. Base64 e una codifica, non una cifra. Chiunque puo decodificarlo con una singola riga di codice in qualsiasi linguaggio, incluso incollandolo in questo stesso strumento nell altra direzione. Serve per rendere i byte sicuri da trasportare attraverso un canale di solo testo, non per mantenerli segreti.

Torna a tutti i post