Pular para o conteúdo
Ghostchars

Largura zero e invisíveis

ZERO WIDTH NO-BREAK SPACE (U+FEFF)

A marca de ordem de bytes. Bem no começo de um arquivo ela anuncia a codificação; em qualquer outro lugar é um nada invisível que ainda por cima proíbe a quebra de linha — uso que o Unicode desaconselha desde a versão 3.2.

Ponto de código
U+FEFF
Removido por padrão
Sim
Opção que governa
Nenhuma opção necessária
Pode ser essencial
Não

De onde ele vem

De editores do Windows, de exportações do Excel e de tudo o que grava “UTF-8 com BOM”. Concatenar vários arquivos assim deixa uma BOM no meio do resultado. Copiar de uma célula de planilha costuma trazer uma junto.

Por que ele importa

Uma BOM no início quebra parsers de JSON, front matter YAML, shebangs de shell e cabeçalhos de CSV; uma BOM no meio é simplesmente um caractere invisível que derruba qualquer comparação exata. É também o motivo de um arquivo de configuração “parecer certinho” e não carregar.

Antes e depois

AntesU+FEFF{"ok": true}
Depois{"ok": true}

O primeiro caractere, invisível, é o motivo de o `JSON.parse` recusar esta string.

O caractere aparece como uma etiqueta para você ver onde ele fica. No seu texto, ele não desenha absolutamente nada.

Quando ele é legítimo

Como primeiro caractere de um arquivo, no papel de assinatura de codificação — que é uma propriedade do ARQUIVO, não do texto. Quando o texto já está em uma caixa de colar, não sobra nenhuma BOM legítima.

Como remover

A limpeza padrão remove, esteja ela onde estiver. O Ghostchars trabalha com texto, então trata a BOM inicial como texto também.

Ele é uma marca-d’água de IA?

Não é marca-d’água

Não. Uma BOM é um artefato de codificação produzido por editores e por rotinas de exportação. Ela diz alguma coisa sobre o programa que salvou o arquivo e nada sobre quem escreveu as palavras.

Nenhuma relação com texto gerado por máquina. Ele vem de algum software, de um teclado ou de uma pessoa.

Perguntas

Por que o meu JSON não faz parse?

Uma BOM no início é um caractere antes da chave de abertura. A maioria dos parsers de JSON a rejeita como token inesperado, e o erro aponta para a posição 0, onde não há nada visível.

A BOM é a mesma coisa que o word joiner?

No meio de um texto, as duas se comportam igual. O Unicode desaconselhou o U+FEFF nesse papel e fez do U+2060 WORD JOINER o caractere correto, deixando o U+FEFF só como marca de ordem de bytes.

Alguma hora eu preciso manter a BOM?

Só se alguma ferramenta seguinte exigir um arquivo marcado com BOM — e, nesse caso, você a acrescenta na hora de gravar o arquivo, não carregando-a dentro do texto.

Confira o seu próprio texto

Cole qualquer coisa no limpador para ver todos os caracteres ocultos que ela contém, com posição, ponto de código e o que acontece com cada um. Nada é enviado para lugar nenhum.

Confira o seu próprio textoTodos os caracteres