BOM: che cos’è il Byte Order Mark?

Le informazioni inviate tramite Internet richiedono un certo ordine. Il destinatario dei dati (ad esempio una pagina HTML) deve sapere come leggere tali informazioni. Per garantire ciò vengono inseriti diversi contrassegni nel codice. Uno di questi è il Byte Order Mark (BOM). Ma a cosa serve questo marker?

A cosa serve il BOM?

I caratteri possono essere codificati in modi diversi. Mentre attualmente si utilizza soprattutto la codifica UTF-8, in passato era diffusa quella UTF-16, che viene utilizzata spesso ancor oggi. Parzialmente si usa anche UTF-32. A differenza di UTF-8, tuttavia, per le codifiche con un numero maggiore di bit per carattere, è necessario conoscere l’ordine dei byte.

In una codifica UTF-8 ogni carattere può essere rappresentato con un byte (ovvero 8 bit). Con UTF-16 sono necessari invece due byte (ovvero 16 bit) per codificare un carattere. Affinché il carattere possa essere interpretato correttamente, occorre chiarire se i byte vengono letti da sinistra a destra o da destra a sinistra. In base a questo si ottiene un valore completamente diverso.

  • Da sinistra a destra: 01101010 00110101 è in notazione esadecimale 6a35
  • Da destra a sinistra: 01101010 00110101 è in notazione esadecimale 356a

Se ora si vedesse questa sequenza numerica nel contesto di una tabella Unicode verrebbero visualizzati due caratteri completamente diversi. Nella prima lettura si parla di big endian (BE), nella seconda di little endian (LE); il big endian indica per primo il valore più alto, mentre il little endian quello più basso.

Fatto

Nella vita di tutti i giorni la notazione secondo big endian è più vicina a noi, anche se si tratta solo di una convenzione. I computer possono gestire entrambi i metodi di memorizzazione, motivo per cui il contrassegno è utile.

Per segnalare in quale ordine devono essere letti i byte è necessario il BOM. Si tratta di un carattere che non è visibile e che pertanto è noto anche come spazio di larghezza zero non separabile. Si tratta dunque di uno spazio con larghezza pari a zero e che non attiva un’interruzione di linea. In UTF-16 questo carattere (esadecimale) è feff (BE) oppure fffe (LE). Questo valore viene quindi anteposto all’effettiva codifica dei caratteri.

La codifica UTF-8 in realtà non ha bisogno del BOM e tuttavia lo si trova anche nei testi che sono stati codificati con esso. Si tratta di un residuo di una conversione da UTF-16 /UTF-32 a UTF-8, oppure è stato inserito automaticamente da un editor. Infatti anche se il Byte Order Mark non è necessario per UTF-8, di solito non interferisce in quanto non viene visualizzato.

Difficoltà con il Byte Order Mark

I problemi sorgono quando il sistema ricevente non sa come gestire il BOM. Alcune versioni di PHP o diversi ambienti simili a Unix non prevedono disegni, il che può portare per esempio a una riproduzione errata di un sito web.

I problemi possono sorgere anche tra HTTP e HTML: un’intestazione HTTP contiene già informazioni sulla codifica dei caratteri, provenienti dalle impostazioni del server. Se il documento HTML è stato creato con il BOM, ma l’intestazione HTTP fornisce un’indicazione diversa al browser, anche questo può portare a errori di visualizzazione. Ma da quando è stata apportata una modifica alla specifica HTML5 ciò non dovrebbe più verificarsi: è stato richiesto che il BOM in una fase iniziale sovrascriva le informazioni dell’intestazione HTTP. È possibile tuttavia che le versioni di browser precedenti non abbiano ancora implementato questa nuova regolamentazione.

Rimuovere il BOM: come funziona

Per rimuovere il Byte Order Mark da un codice sorgente, è necessario un editor di testo che includa tra le opzioni la memorizzazione del contrassegno. Si trasferisce il file con il BOM nel software, lo si salva nuovamente senza il BOM e si converte quindi la codifica. Il contrassegno non dovrebbe più presentarsi. Ad esempio nel popolare editor di testo Notepad++ si varia la codifica e in seguito si può salvare il file senza il BOM.

N.B.

Nelle versioni precedenti di Notepad++ è ancora possibile trovare la voce di menu UTF-8 senza BOM. Nelle versioni più recenti ciò corrisponde alla dicitura UTF-8. Se contrassegnata la voce sarebbe UTF-8 BOM.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.