Ce face base64Url
base64Url este un Base64Codec care folosește alfabetul „URL-safe”: caracterele + și /, care au înțeles special în URL-uri și în căile de fișiere, sunt înlocuite cu - și _. Este folosit în token-uri JWT, linkuri de confirmare și nume de fișiere generate.
Se folosește cu encode și decode. Și varianta obișnuită există ca obiect: base64 (pe care base64Encode îl apelează). base64Url.decode acceptă ambele alfabete, iar normalize completează caracterele = lipsă și corectează alfabetul.
Ce returnează
encode: textul Base64 URL-safe; decode: octeții.
Exemple
Exemplul 1: Diferența față de Base64 obișnuit
Aceiași octeți: Base64 normal produce + și /, varianta URL produce - și _.
import 'dart:convert';
void main() {
final octeti = [251, 255, 191, 62, 63];
print(base64.encode(octeti));
print(base64Url.encode(octeti));
print(base64Url.decode('-_-_Pj8='));
}
Rezultat
+/+/Pj8=
-_-_Pj8=
[251, 255, 191, 62, 63]
Exemplul 2: Link de confirmare cu date în URL
Unele sisteme taie = de la final; normalize îl pune la loc înainte de decodare.
import 'dart:convert';
void main() {
final cod = base64Url.encode(utf8.encode('ana@exemplu.ro|2026-10-19'));
final link = 'https://exemplu.ro/confirma?cod=$cod';
print(link);
final primit = Uri.parse(link).queryParameters['cod']!.replaceAll('=', '');
print(primit);
print(utf8.decode(base64Url.decode(base64Url.normalize(primit))));
}
Rezultat
https://exemplu.ro/confirma?cod=YW5hQGV4ZW1wbHUucm98MjAyNi0xMC0xOQ==
YW5hQGV4ZW1wbHUucm98MjAyNi0xMC0xOQ
ana@exemplu.ro|2026-10-19
Greșeli frecvente
- Pui Base64 obișnuit într-un URL fără să-l codifici:
+devine spațiu la citire și datele se strică. Foloseștebase64Url. - Decodezi un text din care s-a tăiat
=de la final:decodearuncăFormatException. Trece-l mai întâi prinbase64Url.normalize.
Comenzi înrudite
base64Encode: base64Encode transformă octeți în text Base64; base64Decode face invers, din text Base64 în octeți.utf8: Codec-ul UTF-8: encode transformă textul în octeți, decode transformă octeții înapoi în text.Codec: Clasa de bază pentru perechi encode/decode (utf8, base64, json); fuse le leagă în lanț, inverted le inversează.