Marca de ordem de byte
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.[1] 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
[editar | editar código-fonte]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,[2] mas não é recomendado,[3] 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.[4] 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
[editar | editar código-fonte]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)
|
- ↑ «Unicode FAQ: UTF-8, UTF-16, UTF-32 & BOM» (em inglês). Unicode. 26 de fevereiro de 2010. Consultado em 11 de abril de 2010
- ↑ «Chapter 2:General Structure» (PDF). The Unicode Standard 5.0 (em inglês). Unicode. Consultado em 29 de março de 2009
- ↑ «Chapter 2:General Structure» (PDF). The Unicode Standard 5.0. Unicode. Consultado em 30 de novembro de 2008
- ↑ Markus Kuhn (2007). «UTF-8 and Unicode FAQ for Unix/Linux: What different encodings are there?». Consultado em 20 de janeiro de 2009
Ver também
[editar | editar código-fonte]Ligações externas
[editar | editar código-fonte]- «Unicode FAQ: UTF-8, UTF-16, UTF-32 & BOM» (em inglês)
- «The Unicode Standard, chapter 2.6 Encoding Schemes» (PDF) (em inglês)
- «The Unicode Standard, chapter 2.13 Special Characters and Noncharacters, section Byte Order Mark (BOM)» (PDF) (em inglês)
- «The Unicode Standard, chapter 16.8 Specials, section Byte Order Mark (BOM): U+FEFF» (PDF) (em inglês)