Byte-order Mark (BOM)

O byte-order mark (BOM) é um caractere Unicode (U+FEFF byte Order Mark – BOM), que aparece como um número mágico no inicio do arquivo e indicam para o programa qual tipo de caracteres devem ser utilizados.

Sem isso, ao abrir o arquivo, caracteres “quebrados” podem aparecer como, por exemplo, as ? que aparecem no lugar de uma letra com acento.

Os números mágicos são comuns em programas em muitos sistemas operacionais. Números mágicos implementam dados fortemente tipados e são uma forma de sinalizar os tipos de dados para o programa está recebendo o arquivo.

Exemplo: Arquivos GIF tem o código ASCII para “GIF89a” (4749 46 38 39 61) ou “GIF87a” (47 49 46 38 37 61)

Apesar de ser opcional, quando utilizado, o BOM irá aparecer no inicio do arquivo

Unicode pode ser codificado como integers de 8 bits, 16 bits ou 32 bits. Para as representações de 16 e 32 bits, um programa lendo o arquivo texto precisa saber em qual byte-order os integers foram codificados. Como o BOM em si é codificado no mesmo esquema que o resto do documento e tem um valor conhecido, programa pode examinar esses primeiros bytes alguns para determinar a codificação.

Codificação Representação Hexadecimal Representação Decimal Bytes como caracteres CP1252
UTF-8 EF BB BF 239 187 191 
UTF-16 (BE) FE FF 254 255 þÿ
UTF-16 (LE) 00 00 FE FF 0 0 254 255 ␀␀þÿ (␀ se refere ao caractere null de ASCII)
UTF-32 (BE) FF FE 00 00 255 254 0 0 ÿþ␀␀ (␀ se refere ao caractere null de ASCII)
UTF-7 2B 2F 76 38
2B 2F 76 39
2B 2F 76 2B
2B 2F 76 2F
2B 2F 76 38 2D
43 47 118 56
43 47 118 57
43 47 118 43
43 47 118 47
43 47 118 56 45
+/v8
+/v9
+/v+
+/v/
+/v8-
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 ␎þÿ (␎ representa o caractere "shift out" do ASCII)
BOCU-1 FB EE 28 251 238 40 ûî(
GB-18030 84 31 95 33 132 49 149 51 „1•3

Versão tl;dr: São os caracteres que contam a codificação do arquivo para o programa. Sem ele, você corre o risco de ver caracteres ‘estranhos’ na hora que abrir o arquivo.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Conhecimento Técnico, Dev and tagged , , .

2 Comments

  1. Pingback: FileReadEx (FileRead) – Raccoon Ninja

  2. Pingback: FileWriteEx (FileWrite) – Raccoon Ninja

Comments are closed.