Compartilhar via


Usando marcas de ordem de byte

Os arquivos de texto Unicode podem ser codificados em vários formatos, incluindo UTF-8, UTF-16 e UTF-32. Cada um desses formatos pode ser prefixado com uma marca de ordem de byte (BOM) que indica a ordem de bytes usada quando o texto foi escrito. As marcas de ordem de byte disponíveis estão listadas na tabela a seguir. Para UTF-8, a marca de ordem de bytes é opcional, pois os bytes podem estar apenas em uma ordem. Para UTF-16 e UTF-32, a marca de ordem de byte é necessária porque esses formatos são sensíveis à ordenação de bytes.

Observação

Uma marca de ordem de byte não é um caractere de controle que seleciona a ordem de bytes do texto.

 

Marca de ordem de byte Descrição
EF BB BF UTF-8
FF FE UTF-16, little endian
FE FF UTF-16, big endian
FF FE 00 00 UTF-32, little endian
00 00 FE FF UTF-32, big-endian

 

Observação

Os produtos herdados da Microsoft usam Windows-1252 ou UCS-2 (fixo com UTF-16), ordem de bytes little endian, para "Unicode". Para novos aplicativos, UTF-8 é recomendado.

 

Idealmente, todo o texto Unicode segue apenas um conjunto de regras de ordenação de bytes. Isso não é possível, no entanto, porque os microprocessadores diferem na colocação do byte menos significativo. Os processadores Intel e MIPS posicionam o byte menos significativo primeiro, enquanto os processadores Motorola (e todos os arquivos Unicode com byte invertido) o posicionam por último. Com apenas um único conjunto de regras de ordenação de bytes, os usuários de um tipo de microprocessador são forçados a trocar a ordem de bytes toda vez que um arquivo de texto simples é lido ou gravado, mesmo que o arquivo nunca seja transferido para outro sistema operacional baseado em um microprocessador diferente.

O local preferido para especificar a ordem dos bytes é em um cabeçalho de arquivo, mas os arquivos de texto não têm cabeçalhos. Portanto, o Unicode definiu um caractere (U+FEFF) e um não caractere (U+FFFE) como marcas de ordem de byte. Eles são imagens de bytes espelhados um do outro.

Como a sequência U+FEFF é extremamente rara no início de um arquivo de texto não Unicode regular, ela pode servir como um marcador ou assinatura implícita para identificar o arquivo como um arquivo Unicode. Os aplicativos que leem arquivos de texto Unicode e não Unicode devem usar a presença dessa sequência como um indicador de que o arquivo provavelmente é um arquivo Unicode. Compare essa técnica com o uso do marcador MS-DOS EOF para encerrar arquivos de texto.

Quando um aplicativo encontra U+FEFF no início de um arquivo de texto, ele normalmente processa o arquivo como um arquivo Unicode, embora possa executar verificações heurísticas adicionais para verificação. Essa verificação pode ser tão simples quanto testar para descobrir se a variação nos bytes de baixa ordem é muito maior do que a variação nos bytes de alta ordem. Por exemplo, se o texto ASCII for convertido em texto Unicode, cada segundo byte será 0. Além disso, a verificação dos caracteres de alimentação de linha e retorno de carro (U+000A e U+000D) e do tamanho do arquivo par ou ímpar pode fornecer um forte indicador da natureza do arquivo.

Quando um aplicativo encontra U+FFFE no início de um arquivo de texto, ele interpreta isso como significando que o arquivo é um arquivo Unicode com byte invertido. O aplicativo pode trocar a ordem dos bytes ou alertar o usuário de que ocorreu um erro.

Como o caractere de marca de ordem de byte Unicode não é encontrado em nenhuma página de código, ele desaparece se os dados forem convertidos em ANSI. Ao contrário de outros caracteres Unicode, ele não é substituído por um caractere padrão quando é convertido. Se uma marca de ordem de byte for encontrada no meio de um arquivo, ela não será interpretada como um caractere Unicode e não terá efeito na saída de texto.

Observação

O valor Unicode U+FFFF é ilegal em arquivos de texto sem formatação e não pode ser passado entre aplicativos. É reservado para uso privado de um aplicativo.

 

Usando caracteres especiais em Unicode