Compartilhar via


Usando marcas de pedido de bytes

Sempre prefixe um arquivo de texto sem formatação Unicode com uma marca de pedido de byte, que informa um aplicativo que recebe o arquivo de que o arquivo é ordenado por bytes. As marcas de pedido de bytes disponíveis estão listadas na tabela a seguir. Como o texto sem formatação Unicode é uma sequência de valores de código de 16 bits, ele é sensível à ordenação de bytes usada quando o texto é gravado.

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

A Microsoft usa a ordem de byte UTF-16, little endian.

 

O ideal é que todo o texto Unicode siga apenas um conjunto de regras de ordenação de bytes. Isso não é possível, no entanto, porque os microprocessadores diferem no posicionamento do byte menos significativo. Os processadores Intel e MIPS posicionam o byte menos significativo primeiro, enquanto os processadores Motorola (e todos os arquivos Unicode invertidos por bytes) a 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 sempre que um arquivo de texto sem formatação é lido ou gravado, mesmo que o arquivo nunca seja transferido para outro sistema operacional com base em um microprocessador diferente.

O local preferencial para especificar a ordem de bytes está em um cabeçalho de arquivo, mas os arquivos de texto não têm cabeçalhos. Portanto, Unicode definiu um caractere (U+FEFF) e um não gráfico (U+FFFE) como marcas de ordem de bytes. São espelho imagens de bytes umas das outras.

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 implícito ou uma assinatura 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 EOF MS-DOS 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. Esse marcar pode ser tão simples quanto o teste 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, verificar os caracteres de retorno de linha e carro (U+000A e U+000D) e para tamanho de arquivo par ou ímpar pode fornecer um forte indicador da natureza do arquivo.

Quando um aplicativo localiza U+FFFE no início de um arquivo de texto, ele o interpreta para significar que o arquivo é um arquivo Unicode invertido por bytes. 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 bytes Unicode não é encontrado em nenhuma página de código, ele desaparece se os dados são 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 do texto.

Observação

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

 

Usando caracteres especiais no Unicode