Base64 em Python e JavaScript: exemplos práticos de encode e decode
Todo desenvolvedor precisa trabalhar com Base64 em algum momento, seja para autenticação de APIs, manipulação de JWTs, envio de arquivos por JSON ou integração com serviços externos. Cada linguagem tem sua própria API para Base64. Este guia mostra exemplos práticos em Python e JavaScript, as duas linguagens mais usadas no desenvolvimento web moderno, com o Codificador Base64 do WikiPlus como ferramenta de verificação rápida.
Base64 em JavaScript: browser e Node.js
No navegador, JavaScript oferece btoa() para codificar e atob() para decodificar Base64 padrão. btoa('Olá mundo') porém falha com caracteres não-ASCII. A solução correta para Unicode é: btoa(unescape(encodeURIComponent('Olá mundo'))). Para decodificar: decodeURIComponent(escape(atob(base64str))). Em Node.js, use Buffer: Buffer.from('Olá mundo', 'utf8').toString('base64') para codificar, e Buffer.from(base64str, 'base64').toString('utf8') para decodificar. Para Base64url (JWTs), a biblioteca jose ou jsonwebtoken cuida da conversão automaticamente. O Codificador Base64 do WikiPlus verifica se o resultado do seu código está correto.
Base64 em Python: módulo base64
Python tem o módulo base64 na biblioteca padrão. Para codificar: import base64; base64.b64encode(b'Olá mundo') retorna um objeto bytes com a string Base64. Para decodificar: base64.b64decode(b'T2zDoSBtdW5kbw==').decode('utf-8'). Para Base64url: base64.urlsafe_b64encode() e base64.urlsafe_b64decode(). Atenção: b64decode é leniente com padding incorreto por padrão; para validação estrita use validate=True. Em scripts de automação que codificam credenciais para APIs: import base64; credentials = base64.b64encode(f'{user}:{password}'.encode()).decode().
Base64 em outras linguagens: PHP, Go, Java
Em PHP: base64_encode('texto') e base64_decode('dGV4dG8='). Para Base64url no PHP: strtr(base64_encode($data), '+/', '-_') e rtrim(..., '='). Em Go: encoding/base64 é o pacote padrão; base64.StdEncoding.EncodeToString([]byte('texto')) e base64.URLEncoding para URL-safe. Em Java: java.util.Base64.getEncoder().encodeToString(bytes) e Base64.getUrlEncoder() para URL-safe. Em Ruby: Base64.encode64('texto') e Base64.strict_encode64() para sem quebras de linha. Em todos os casos, o Codificador Base64 do WikiPlus serve como referência de verificação rápida durante o desenvolvimento.
Erros comuns com Base64 em código
O erro mais frequente é tentar codificar uma string Unicode diretamente com btoa() em JavaScript sem convertê-la para bytes UTF-8 primeiro — isso lança RangeError para caracteres não-ASCII. Outro erro é confundir Base64 padrão e Base64url: usar + e / em uma URL causa parsing incorreto. Esquecer de remover quebras de linha em strings Base64 vindas de certificados PEM ao processá-las em código. Não adicionar padding = ao decodificar strings Base64url de JWTs. Usar Base64 para 'ofuscar' senhas, acreditando que oferece alguma segurança. O Codificador Base64 do WikiPlus ajuda a diagnosticar esses problemas rapidamente.
Perguntas frequentes
- Como codificar um arquivo em Base64 no Python?
- Use: with open('arquivo.pdf', 'rb') as f: resultado = base64.b64encode(f.read()).decode('utf-8'). O modo 'rb' (read binary) é essencial para arquivos não-texto. Para arquivos grandes, processe em chunks para evitar uso excessivo de memória.
- Como decodificar Base64 no terminal Linux?
- Use o comando echo 'BASE64STRING' | base64 --decode. Para decodificar um arquivo: base64 --decode arquivo.b64 > arquivo_original. Para codificar: base64 arquivo.pdf > arquivo.b64. No macOS o comando é idêntico.
- Por que base64.b64decode em Python pode dar erro de padding?
- Base64 padrão requer comprimento múltiplo de 4. Strings sem padding = causam binascii.Error. Corrija adicionando padding: padded = s + '=' * (4 - len(s) % 4) % 4. Strings Base64url de JWTs frequentemente omitem o padding, então esse ajuste é necessário.