Calcule com grupos de três bytes e preenchimento

O Base64 padrão da RFC 4648 representa três bytes com quatro caracteres. Um grupo final de um byte precisa de ==; dois bytes, =; três bytes, nenhum preenchimento. Com preenchimento e sem quebras adicionadas, o comprimento é 4 * Math.ceil(n / 3), sendo n a quantidade de bytes de entrada. Zero bytes dão comprimento zero.

n = new TextEncoder().encode(input).length
length = 4 * Math.ceil(n / 3)

f     1   Zg==       4
fo    2   Zm8=       4
foo   3   Zm9v       4
foob  4   Zm9vYg==   8

Os exemplos fixos foram executados pela função real. f, fo e foo geram quatro caracteres apesar de comprimentos diferentes; o preenchimento muda. foob tem quatro bytes e gera oito caracteres. O preenchimento indica o formato do grupo final, não caracteres adicionados ao original.

Entradas de 1, 2, 3 e 4 bytes comparadas com saídas Base64 de 4, 4, 4 e 8 caracteres e preenchimento ==, =, nenhum e ==.
Diagrama próprio calculado a partir dos exemplos. Os números à esquerda contam bytes de entrada; as strings são saídas reais. Não mede o tamanho total da transferência. Os números à direita contam caracteres de saída.

RFC 4648: Base 64 Encoding

Diferencie caracteres, bytes e quebras de linha

O Moyoutil usa TextEncoder para obter bytes UTF-8. O exemplo 가 ocupa três bytes e resulta em 6rCA, quatro caracteres. f seguido de uma quebra LF ocupa dois bytes e resulta em Zgo=. Espaços e quebras do original são dados na codificação. Cabeçalhos HTTP, estruturas externas de JSON e prefixos de URLs de dados ficam fora da fórmula.

base64("가")     // 6rCA
base64("f\n")  // Zgo=

WHATWG Encoding: TextEncoder

Insira o texto e selecione Codificar. Na decodificação, insira apenas a saída Base64 padrão. A decodificação remove espaços em branco da entrada; a codificação preserva os do original. Base64URL com - e _ e recuperação de arquivos binários arbitrários não são suportados. /w== é legível como Base64, mas causa erro por não ser texto UTF-8. Alterar a entrada limpa o resultado antigo e desativa a cópia; converta novamente.

Perguntas frequentes

O Base64 sempre aumenta o tamanho em cerca de 33%?

Em entradas grandes a razão se aproxima de 4/3, mas em entradas pequenas o preenchimento pesa mais. Um byte gera quatro caracteres. Conte bytes e verifique o preenchimento para calcular o comprimento exato.

A interface converte entrada vazia em zero caracteres?

A fórmula retorna zero para zero bytes, mas a interface do Moyoutil pede conteúdo quando a entrada está vazia. O caso limite da fórmula e a política de entrada são diferentes.