Le in­for­ma­zio­ni inviate tramite Internet ri­chie­do­no un certo ordine. Il de­sti­na­ta­rio dei dati (ad esempio una pagina HTML) deve sapere come leggere tali in­for­ma­zio­ni. Per garantire ciò vengono inseriti diversi con­tras­se­gni 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 co­di­fi­ca­ti in modi diversi. Mentre at­tual­men­te si utilizza so­prat­tut­to la codifica UTF-8, in passato era diffusa quella UTF-16, che viene uti­liz­za­ta spesso ancor oggi. Par­zial­men­te si usa anche UTF-32. A dif­fe­ren­za di UTF-8, tuttavia, per le codifiche con un numero maggiore di bit per carattere, è ne­ces­sa­rio conoscere l’ordine dei byte.

In una codifica UTF-8 ogni carattere può essere rap­pre­sen­ta­to con un byte (ovvero 8 bit). Con UTF-16 sono necessari invece due byte (ovvero 16 bit) per co­di­fi­ca­re un carattere. Affinché il carattere possa essere in­ter­pre­ta­to cor­ret­ta­men­te, occorre chiarire se i byte vengono letti da sinistra a destra o da destra a sinistra. In base a questo si ottiene un valore com­ple­ta­men­te diverso.

  • Da sinistra a destra: 01101010 00110101 è in notazione esa­de­ci­ma­le 6a35
  • Da destra a sinistra: 01101010 00110101 è in notazione esa­de­ci­ma­le 356a

Se ora si vedesse questa sequenza numerica nel contesto di una tabella Unicode ver­reb­be­ro vi­sua­liz­za­ti due caratteri com­ple­ta­men­te 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 con­ven­zio­ne. I computer possono gestire entrambi i metodi di me­mo­riz­za­zio­ne, motivo per cui il con­tras­se­gno è utile.

Per segnalare in quale ordine devono essere letti i byte è ne­ces­sa­rio il BOM. Si tratta di un carattere che non è visibile e che pertanto è noto anche come spazio di larghezza zero non se­pa­ra­bi­le. Si tratta dunque di uno spazio con larghezza pari a zero e che non attiva un’in­ter­ru­zio­ne di linea. In UTF-16 questo carattere (esa­de­ci­ma­le) è 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 co­di­fi­ca­ti con esso. Si tratta di un residuo di una con­ver­sio­ne da UTF-16 /UTF-32 a UTF-8, oppure è stato inserito au­to­ma­ti­ca­men­te da un editor. Infatti anche se il Byte Order Mark non è ne­ces­sa­rio per UTF-8, di solito non in­ter­fe­ri­sce in quanto non viene vi­sua­liz­za­to.

Dif­fi­col­tà 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 ri­pro­du­zio­ne errata di un sito web.

I problemi possono sorgere anche tra HTTP e HTML: un’in­te­sta­zio­ne HTTP contiene già in­for­ma­zio­ni sulla codifica dei caratteri, pro­ve­nien­ti dalle im­po­sta­zio­ni del server. Se il documento HTML è stato creato con il BOM, ma l’in­te­sta­zio­ne HTTP fornisce un’in­di­ca­zio­ne diversa al browser, anche questo può portare a errori di vi­sua­liz­za­zio­ne. Ma da quando è stata apportata una modifica alla specifica HTML5 ciò non dovrebbe più ve­ri­fi­car­si: è stato richiesto che il BOM in una fase iniziale so­vra­scri­va le in­for­ma­zio­ni dell’in­te­sta­zio­ne HTTP. È possibile tuttavia che le versioni di browser pre­ce­den­ti non abbiano ancora im­ple­men­ta­to questa nuova re­go­la­men­ta­zio­ne.

Rimuovere il BOM: come funziona

Per rimuovere il Byte Order Mark da un codice sorgente, è ne­ces­sa­rio un editor di testo che includa tra le opzioni la me­mo­riz­za­zio­ne del con­tras­se­gno. Si tra­sfe­ri­sce il file con il BOM nel software, lo si salva nuo­va­men­te senza il BOM e si converte quindi la codifica. Il con­tras­se­gno non dovrebbe più pre­sen­tar­si. 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 pre­ce­den­ti di Notepad++ è ancora possibile trovare la voce di menu UTF-8 senza BOM. Nelle versioni più recenti ciò cor­ri­spon­de alla dicitura UTF-8. Se con­tras­se­gna­ta la voce sarebbe UTF-8 BOM.

Vai al menu prin­ci­pa­le