A marca de ordem de byte (BOM) é um caractere Unicode usado para denotar a extremidade (ordem de bytes) de um arquivo de texto ou fluxo de dados, cujo código é U+FEFF. Seu uso é opcional e, se usado, deve aparecer no começo do fluxo de texto.

Além do seu uso tradicional, esse caractere também pode indicar em qual das diferentes representações Unicode o texto está codificado. Tendo em vista que o Unicode pode ser codificado tanto em 16 quanto 32 bits, o leitor de texto Unicode deve saber em que formato o texto que está sendo lido está codificado.

Uso

Em UTF-16, um BOM (U+FEFF) é posicionado como primeiro caractere do arquivo para indicar a extremidade de todos os códigos 16-bit do arquivo. Dependendo do posicionamento de U+FE U+FF é possível inferir a sequência de caracteres. O padrão garante que o código U+FFFE nunca será atribuído a qualquer caractere válido.

Em contrapartida, o padrão UTF-8 não possui problemas de extremidade, mas o BOM também pode ser encontrado. Um BOM UTF-8 é explicitamente permitido pela norma Unicode, mas não é recomendado, já que identifica somente um arquivo como UTF-8 e não indica qualquer informação sobre extremidade. Diversos programas Windows (incluindo o Bloco de Notas) adicionam caracteres BOM em arquivos UTF-8 por padrão. Entretanto, em sistemas Unix-like essa prática não é recomendada por interferir no processamento de códigos importantes como shebang no começo de um script interpretado. Também pode interferir no código fonte de linguagens de programação que não o reconhecem.

Apesar do BOM também poder ser usado em UTF-32, tal codificação é raramente usada na transmissão de dados. Mas as mesmas regras de UTF-16 se aplicam. Para os conjuntos de caracteres UTF-16BE, UTF-16LE, UTF-32BE e UTF-32LE o BOM não pode ser usado, e um U+FEFF inicial deve ser interpretado como um espaço em branco de largura zero sem quebra de linha.

Se o caractere aparecer no meio de um fluxo de texto, também deve ser interpretado como espaço de largura zero sem quebra de linha, o que em termos práticos corresponde a um caractere nulo.

Alguns editores de texto em ambientes UTF-8 adicionam o BOM no começo dos arquivos de texto. Se a página está apresentada em Latin-1 (ISO-8859-1), três bytes aparecem: .

Representações Codificação Representação (hexadecimal) Representação (decimal) Representação (ISO-8859-1) UTF-8 EF BB BF 239 187 191  UTF-16 (BE) FE FF 254 255 þÿ UTF-16 (LE) FF FE 255 254 ÿþ UTF-32 (BE) 00 00 FE FF 0 0 254 255 □□þÿ (□ é o caractere nulo em ASCII) UTF-32 (LE) FF FE 00 00 255 254 0 0 ÿþ□□ (□ é o caractere nulo em ASCII) UTF-7 2B 2F 76, e um dos seguintes bytes: [ 38 | 39 | 2B | 2F ] 43 47 118, e um dos seguintes bytes: [ 56 | 57 | 43 | 47 ] +/v, e um dos seguintes caracteres: 8 9 + / UTF-1 F7 64 4C 247 100 76 ÷dL UTF-EBCDIC DD 73 66 73 221 115 102 115 Ýsfs SCSU 0E FE FF 14 254 255 □þÿ (□ é o caractere shift out em ASCII) BOCU-1 FB EE 28 opcionalmente seguido de FF 251 238 40 opcionalmente seguido de 255 ûî( opcionalmente seguido de ÿ GB-18030 84 31 95 33 132 49 149 51 □1■3 (□ e ■ são caracteres não mapeados em ISO-8859-1)

Ver também Espaço rígido Pontuação

Ligações externas

Categoria:Unicode