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== 8Os 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.
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=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.