Como reparar uma string Base64
- Cole o valor quebrado em Base64 para verificar. Deixe as aspas, os prefixos e as quebras de linha ao redor; a ferramenta precisa deles para entender o que aconteceu.
- Escolha o Formato de saída: padrão com preenchimento, padrão sem preenchimento, URL-safe com ou sem preenchimento, MIME (linhas de 76 caracteres, CRLF) ou PEM (linhas de 64 caracteres).
- Leia O que foi corrigido. Cada reparo aparece separado, para você distinguir uma limpeza inofensiva de mudanças que podem ter custado dados.
- Copie ou baixe o resultado, clique em Validar o resultado para fazer uma verificação completa ou em Baixar arquivo decodificado para salvar os bytes.
O que o reparo corrige
| Você colou | O que aconteceu | Reparado |
|---|---|---|
"SGVsbG8gd29ybGQ\u003d" | string JSON com = escapado | SGVsbG8gd29ybGQ= |
SGVsbG8%3D | percent-encoding em uma URL | SGVsbG8= |
PDw/Pz8 Pg== | o + virou espaço em uma query string | PDw/Pz8+Pg== |
PDw_Pz8-Pg | URL-safe e sem preenchimento | PDw/Pz8+Pg== |
SGVsbG8gd29ybGQ | preenchimento removido | SGVsbG8gd29ybGQ= |
SGVsbG8=V29ybGQ= | dois valores concatenados | SGVsbG9Xb3JsZA== (HelloWorld) |
SGVsbG9= | bits não usados diferentes de zero | SGVsbG8= |
Authorization: Basic … | copiado junto com o nome do cabeçalho | só o token |
Ele também remove prefixos data:…;base64, e linhas PEM -----BEGIN …-----, tira aspas simples ao redor, transforma \n e \/ literais de volta em caracteres (o json_encode do PHP escreve \/ por padrão), elimina espaços e quebras de linha, unifica alfabetos misturados +/ e -_ e corrige a quantidade de =.
Em valores concatenados, cada pedaço é decodificado separadamente e os bytes são unidos, o que é o correto quando um programa anexou blocos com preenchimento um atrás do outro. Apagar o = do meio, em vez disso, deslocaria todos os bits seguintes e produziria lixo.
Reparos que podem esconder um problema real
Duas correções aparecem como avisos porque são palpites:
- Caracteres ilegais removidos. Se a string tinha
*,#ou um caractere Unicode perdido, a ferramenta o apaga e lista quais caracteres saíram. Um caractere no meio dos dados pode ter sido um símbolo real que foi corrompido; nesse caso, os bytes decodificados continuarão errados a partir dali. - Um caractere solto descartado. Um comprimento com resto 1 não pode ser gerado por nenhum codificador, então há um caractere a mais ou a string foi cortada. A ferramenta descarta o último caractere para que o resto decodifique, mas, se o valor estava truncado, o fim do arquivo se perdeu. Uma imagem truncada costuma mostrar a parte de baixo cinza ou faltando; um ZIP truncado não abre.
Quando qualquer um desses avisos aparecer, tente obter o original de novo: uma linha de log sem cortes, a resposta completa da API ou o anexo direto do servidor de e-mail.
Por que uma correção ingênua não basta
O snippet comum para “consertar” Base64 trata espaços, caracteres URL-safe e preenchimento:
def fix_base64(s):
s = "".join(s.split())
s = s.replace("-", "+").replace("_", "/").rstrip("=")
return s + "=" * (-len(s) % 4)
Ele repara SGVsbG8gd29ybGQ e PDw_Pz8-Pg corretamente. Passe para ele PDw/Pz8 Pg==, em que um + virou espaço, e ele remove o espaço, deixando 9 caracteres de dados. O Python então falha com “number of data characters (9) cannot be 1 more than a multiple of 4”. Escapes de JSON, %3D, blocos colados e prefixos passam do mesmo jeito. O reparo aqui tenta cada correção por vez e só troca espaço por mais quando o resultado tem um comprimento válido.
A correção mais segura a longo prazo está na origem: aplique percent-encoding ao Base64 antes de colocá-lo em uma URL, ou use Base64URL, e mantenha-o longe de lugares que quebram linhas ou escapam texto. Se a string reparada ainda decodificar para algo inesperado, o guia de erros de Base64 cobre texto embaralhado e codificação dupla, e o decodificador Base64 mostra os bytes.
Perguntas frequentes
Como resolver "Incorrect padding" no Python?
Acrescente = até o comprimento ser múltiplo de 4: s + "=" * (-len(s) % 4). Se o erro continuar, a string tem outros danos, como espaços ou escapes; cole aqui para ver o que mais está errado.
Por que tem espaços no meu Base64?
Normalmente um + passou por uma query string de URL ou por um formulário HTML sem percent-encoding, e o lado que recebeu o transformou em espaço. O reparo devolve o + quando isso resulta em um comprimento válido.
Um reparo pode perder dados?
Remover caracteres ilegais ou um caractere final solto pode, e a lista de correções avisa. Se a ferramenta informar que descartou um caractere porque os dados estavam cortados, consiga uma cópia completa do original em vez de confiar no resultado.
O que significa \u003d no fim do meu Base64?
É um escape de JSON para =. Algumas bibliotecas JSON, entre elas o Gson, escapam o = por segurança em HTML. Um parser JSON desfaz isso automaticamente; o reparo faz o mesmo quando você cola o texto bruto.