Base85 Encoder / Decoder
Codifique e decodifique texto usando codificação Base85 (ASCII85) e RFC 1924.
Sobre Base85
Base85 codifica dados binários usando 85 caracteres ASCII imprimíveis. ASCII85 é usado em PDF e PostScript. RFC 1924 usa um conjunto de caracteres diferente.
Sobre esta ferramenta
Base85 é um sistema de codificação binário-para-texto que converte dados brutos em texto ASCII legível, sendo ideal para transmitir informações binárias através de canais apenas de texto. Diferentemente de Base64, que expande dados em 33%, Base85 é muito mais eficiente em espaço, adicionando apenas cerca de 25% ao tamanho do arquivo—uma vantagem significativa ao lidar com cargas grandes como imagens ou anexos de documentos.
Para usar este codificador, simplesmente escolha sua variante de codificação (ASCII85 é o padrão Adobe usado em PDFs e PostScript; RFC 1924 é uma alternativa orientada para redes), depois selecione modo de codificação ou decodificação. Cole seu texto ou dados codificados, clique no botão, e o resultado aparece com uma comparação de tamanho mostrando exatamente quanto espaço a versão codificada consome.
Base85 se destaca em contextos especializados onde tanto eficiência quanto segurança de texto importam: PDFs armazenando fontes incorporadas, gráficos PostScript em fluxos de trabalho de impressão, ou protocolos de rede que precisam de representações compactas de dados binários. Enquanto Base64 continua tendo suporte mais universal, Base85 é a escolha padrão quando você precisa minimizar tamanho de saída sem sacrificar portabilidade.
Perguntas Frequentes
Implementação de Código
import struct
def encode_ascii85(data: bytes) -> str:
result = []
for i in range(0, len(data), 4):
chunk = data[i:i+4]
padded = chunk.ljust(4, b'\x00')
n = struct.unpack('>I', padded)[0]
if n == 0 and len(chunk) == 4:
result.append('z')
else:
chars = []
for _ in range(5):
chars.append(chr(n % 85 + 33))
n //= 85
result.extend(reversed(chars[:len(chunk)+1]))
return '<~' + ''.join(result) + '~>'
def decode_ascii85(s: str) -> bytes:
s = s.strip()
if s.startswith('<~') and s.endswith('~>'):
s = s[2:-2]
result = bytearray()
i = 0
while i < len(s):
if s[i] == 'z':
result.extend(b'\x00' * 4); i += 1
else:
chunk = s[i:i+5]
n = sum((ord(c) - 33) * (85 ** (4 - j)) for j, c in enumerate(chunk))
result.extend(struct.pack('>I', n)[:len(chunk)-1])
i += 5
return bytes(result)
text = "Hello, World!"
encoded = encode_ascii85(text.encode())
print("Encoded:", encoded)
print("Decoded:", decode_ascii85(encoded).decode())Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.