BOM : Qu'est-ce qu'un Byte Order Mark ?
Les informations envoyées sur Internet doivent répondre à un certain ordre. Le destinataire des données (par exemple, une page HTML) doit savoir comment lire les informations. Pour ce faire, diffé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 caractères peuvent être encodés de différentes manières. Tandis que de nos jours, les gens utilisent principalement 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 contrairement à UTF-8, les encodages avec un plus grand nombre de bits par caractère doivent identifier l'ordre des octets.
Dans un codage UTF-8, chaque caractère peut être repré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 interprété correctement, l’ordre de lecture des octets (de gauche à droite ou de droite à gauche) doit être clairement défini. Dans le cas contraire, vous risquez d’obtenir une tout autre valeur.
- De gauche à droite : 0110101010 0011010101 représente en notation hexadécimale 6a35
- De droite à gauche : 01101010 0011010101 représente en notation hexadécimale 356a
Si l'on devait voir cette séquence de chiffres dans le contexte d'une table des caractères Unicode, deux caractères complètement diffé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.
Dans la vie de tous les jours, la notation selon Big Endian est la plus utilisée. Cependant, ce n'est qu'une convention. Les ordinateurs 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 (hexadécimal) est soit feff (BE) soit fffe (LE). Cette valeur est ensuite préfixée au codage des caractè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 conversion de UTF-16/UTF-32 en UTF-8, soit il a été inséré automatiquement par un éditeur. Parce que même si le Byte Order Mark n'est pas nécessaire avec UTF-8, il ne pose généralement pas de problème puisqu’il n'est pas affiché.
Cas problématique : Byte Order Mark
Des problèmes surviennent lorsque le système récepteur ne sait pas comment gérer le BOM. Certaines versions de PHP ou différents environnements de type Unix ne s'attendent 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 informations d'encodage de caractères. Celles-ci sont extraites des paramètres du serveur. Si vous avez créé le document HTML avec BOM, mais que l'en-tête HTTP est différent du navigateur, cela peut également entraîner des erreurs d'affichage. Depuis qu’une modification de la spécification HTML5 a été apportée, cela ne devrait plus se produire : il a été demandé que le BOM écrase au début les spécifications de l'en-tête HTTP. Toutefois, il se peut que les anciennes versions de navigateurs 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'enregistrement du marqueur. Le fichier est lu avec le BOM dans le logiciel, puis enregistré sans le BOM, pour ainsi convertir l’encodage. Le marqueur ne devrait alors plus apparaître. Dans l'éditeur de texte populaire Notepad++, par exemple, vous pouvez modifier l'encodage, puis enregistrer le fichier sans BOM.
Dans les anciennes versions de Notepad++, vous pouvez toujours trouver la fonction UTF-8 sans BOM. Dans les versions plus récentes, cela correspond à l'UTF-8 ; avec un marqueur, il s'agit du BOM UTF-8.