Base64 com acento (UTF-8)
- Entrada
- São Paulo!
- Saída esperada
- U8OjbyBQYXVsbyE=
10 caracteres viram 11 bytes (o ã usa 2 bytes em UTF-8) e a saída Base64 tem 16 caracteres, o crescimento de 4/3 arredondado para o múltiplo de 4 mais próximo.
codificação Base64, URL e HTML
Base64, percent-encoding e entidades HTML resolvem o mesmo problema de fundo, caber um byte que um formato de texto não aceita, mas cada um define esse "não aceita" de um jeito diferente, e confundir os três produz string corrompida em vez de erro visível.
10 caracteres viram 11 bytes (o ã usa 2 bytes em UTF-8) e a saída Base64 tem 16 caracteres, o crescimento de 4/3 arredondado para o múltiplo de 4 mais próximo.
=, & e o espaço são reservados dentro de um componente de query string; fora desse componente (por exemplo no path), o conjunto reservado do RFC 3986 é outro.
Os 5 caracteres escapados (& < > " ') bastam para que o navegador nunca interprete o texto como uma tag nova, mesmo sem remover uma letra do conteúdo original.
O Base64 padrão usa os caracteres + e / e completa com = no final (padding). Como +, / e = têm significado em URLs, a variante URL-safe (definida na RFC 4648) os substitui por - e _ e remove o padding, permitindo usar o resultado em URLs, nomes de arquivo e tokens como JWT sem precisar escapar nada. A decodificação aqui aceita as duas variantes automaticamente.
Não. Base64 é reversível sem chave nenhuma, qualquer pessoa com a string decodifica em uma linha; ele existe para transportar byte binário por um canal de texto (um anexo de e-mail, um campo JSON), não para esconder conteúdo.
Cada byte reservado ou fora do ASCII imprimível vira 3 caracteres (%XX), então um texto com muitos espaços, acentos ou símbolos como & e = pode quase triplicar de tamanho; letras, números e um punhado de símbolos (- _ . ~) nunca são codificados.
Porque `é` ocupa mais de 1 byte em UTF-8; se a decodificação assumir Latin-1 (1 byte por caractere) ou cortar a string no meio de um caractere multibyte, o resultado sai com caracteres substitutos ou ilegíveis, mesmo com o esquema de codificação certo.
Nenhuma no resultado renderizado, ambas produzem o caractere &; & é a entidade nomeada e & é a referência numérica decimal do mesmo código de caractere, e um parser HTML aceita as duas formas.
Toda a codificação e decodificação acontece no seu navegador. Nenhum texto é enviado a servidores, seguro para tokens, payloads e dados sensíveis.