Les in­for­ma­tions envoyées sur Internet doivent répondre à un certain ordre. Le des­ti­na­taire des données (par exemple, une page HTML) doit savoir comment lire les in­for­ma­tions. Pour ce faire, dif­fé­rents marqueurs sont insérés dans le code. L'un de ces marqueurs est le Byte Order Mark (BOM). À quoi sert le marqueur ?

Pourquoi ai-je besoin du BOM ?

Les ca­rac­tères peuvent être encodés de dif­fé­rentes manières. Tandis que de nos jours, les gens utilisent prin­ci­pa­le­ment UTF-8, autrefois le codage de type UTF-16 était prisé et reste encore souvent utilisé de nos jours. Parfois UTF-32 est également utilisé, mais con­trai­re­ment à UTF-8, les encodages avec un plus grand nombre de bits par caractère doivent iden­ti­fier l'ordre des octets.

Dans un codage UTF-8, chaque caractère peut être re­pré­senté par un octet (c'est-à-dire 8 bits). UTF-16, d'autre part, nécessite deux octets (16 bits) pour encoder un caractère. Pour que le caractère soit in­ter­prété cor­rec­te­ment, l’ordre de lecture des octets (de gauche à droite ou de droite à gauche) doit être clai­re­ment défini. Dans le cas contraire, vous risquez d’obtenir une tout autre valeur.

  • De gauche à droite : 0110101010 0011010101 re­pré­sente en notation hexa­dé­ci­male 6a35
  • De droite à gauche : 01101010 0011010101 re­pré­sente en notation hexa­dé­ci­male 356a

Si l'on devait voir cette séquence de chiffres dans le contexte d'une table des ca­rac­tères Unicode, deux ca­rac­tères com­plè­te­ment dif­fé­rents seraient affichés. Dans la première lecture, on parle de Big Endian (BE), dans la seconde de Little Endian (LE). Pour Big Endian, il faut d’abord indiquer la valeur la plus élevée, et pour Little Endian la valeur la plus basse.

Remarque

Dans la vie de tous les jours, la notation selon Big Endian est la plus utilisée. Cependant, ce n'est qu'une con­ven­tion. Les or­di­na­teurs peuvent gérer les deux méthodes de stockage, il est donc logique de les marquer.

Pour pouvoir signaler dans quel ordre les octets doivent être lus, on a besoin du BOM. Il s'agit d'un signe qui n'est pas visible et qui est donc également connu sous le nom d'espace insécable sans chasse. Il s'agit donc d'un espace qui a une largeur zéro et qui ne déclenche pas de saut de ligne. En UTF-16, ce caractère (hexa­dé­ci­mal) est soit feff (BE) soit fffe (LE). Cette valeur est ensuite préfixée au codage des ca­rac­tères.

UTF-8 n'a pas vraiment besoin du BOM et pourtant vous pouvez aussi le trouver dans les textes encodés avec ce codage. Soit il s'agit d'un reste d'une con­ver­sion de UTF-16/UTF-32 en UTF-8, soit il a été inséré au­to­ma­ti­que­ment par un éditeur. Parce que même si le Byte Order Mark n'est pas né­ces­saire avec UTF-8, il ne pose gé­né­ra­le­ment pas de problème puisqu’il n'est pas affiché.

Cas pro­blé­ma­tique : Byte Order Mark

Des problèmes sur­vien­nent lorsque le système récepteur ne sait pas comment gérer le BOM. Certaines versions de PHP ou dif­fé­rents en­vi­ron­ne­ments de type Unix ne s'at­ten­dent pas à ce caractère, ce qui peut conduire par exemple à un affichage incorrect d'un site Web.

Des problèmes peuvent également survenir entre HTTP et HTML : un en-tête HTTP contient déjà des in­for­ma­tions d'en­co­dage de ca­rac­tères. Celles-ci sont extraites des pa­ra­mètres du serveur. Si vous avez créé le document HTML avec BOM, mais que l'en-tête HTTP est différent du na­vi­ga­teur, cela peut également entraîner des erreurs d'af­fi­chage. Depuis qu’une mo­di­fi­ca­tion de la spé­ci­fi­ca­tion HTML5 a été apportée, cela ne devrait plus se produire : il a été demandé que le BOM écrase au début les spé­ci­fi­ca­tions de l'en-tête HTTP. Toutefois, il se peut que les anciennes versions de na­vi­ga­teurs n'aient pas encore appliqué cette nouvelle règle.

Supprimer le BOM : comment ça marche !

Si vous voulez supprimer le Byte Order Mark d'un texte source, vous avez besoin d'un éditeur de texte qui propose en option l'en­re­gis­tre­ment du marqueur. Le fichier est lu avec le BOM dans le logiciel, puis en­re­gis­tré sans le BOM, pour ainsi convertir l’encodage. Le marqueur ne devrait alors plus ap­pa­raître. Dans l'éditeur de texte populaire Notepad++, par exemple, vous pouvez modifier l'en­co­dage, puis en­re­gis­trer le fichier sans BOM.

Note

Dans les anciennes versions de Notepad++, vous pouvez toujours trouver la fonction UTF-8 sans BOM. Dans les versions plus récentes, cela cor­res­pond à l'UTF-8 ; avec un marqueur, il s'agit du BOM UTF-8.

Aller au menu principal