Partager via


Utilisation des marques d’ordre des octets

Les fichiers texte Unicode peuvent être encodés dans plusieurs formats, y compris UTF-8, UTF-16 et UTF-32. Chacun de ces formats peut être précédé d’une marque d’ordre des octets (BOM) qui indique l’ordre des octets utilisé lors de l’écriture du texte. Les marques d’ordre des octets disponibles sont listées dans le tableau suivant. Pour UTF-8, la marque d’ordre des octets est optionnelle, car les octets ne peuvent être dans qu’un seul ordre. Pour UTF-16 et UTF-32, la marque d’ordre des octets est nécessaire car ces formats sont sensibles à l’ordre des octets.

Remarque

Une marque d’ordre des octets n’est pas un caractère de contrôle qui sélectionne l’ordre des octets du texte.

 

Marque d'ordre d'octet Description
EF BB BF UTF-8
FF FE UTF-16, little endian
FE FF UTF-16, big endian
FF FE 00 00 UTF-32, little endian
00 00 FE FF UTF-32, big-endian

 

Remarque

Les anciens produits Microsoft utilisent soit Windows-1252, soit UCS-2 (UTF-16 à largeur fixe), avec l’ordre des octets little endian, pour « Unicode ». Pour les nouvelles applications, UTF-8 est recommandé.

 

Idéalement, tout texte Unicode suit un seul ensemble de règles d’ordre des octets. Cela n’est cependant pas possible, car les microprocesseurs diffèrent dans le placement de l’octet le moins significatif. Les processeurs Intel et MIPS placent l’octet le moins significatif en premier, tandis que les processeurs Motorola (et tous les fichiers Unicode inversés) le placent en dernier. Avec un seul ensemble de règles d’ordre des octets, les utilisateurs d’un type de microprocesseur sont forcés d’échanger l’ordre des octets chaque fois qu’un fichier texte brut est lu ou écrit, même si le fichier n’est jamais transféré vers un autre système d’exploitation basé sur un microprocesseur différent.

L’endroit préféré pour spécifier l’ordre des octets est dans un en-tête de fichier, mais les fichiers texte n’ont pas d’en-tête. Par conséquent, Unicode a défini un caractère (U+FEFF) et un non-caractère (U+FFFE) comme marques d’ordre des octets. Ce sont des images miroir en octets l’une de l’autre.

Étant donné que la séquence U+FEFF est extrêmement rare au début d’un fichier texte non-Unicode classique, elle peut servir de marqueur implicite ou de signature pour identifier le fichier comme un fichier Unicode. Les applications qui lisent à la fois des fichiers texte Unicode et non-Unicode doivent utiliser la présence de cette séquence comme un indicateur que le fichier est très probablement un fichier Unicode. Comparez cette technique à l’utilisation du marqueur de fin de fichier (EOF) MS-DOS pour terminer les fichiers texte.

Lorsqu’une application trouve U+FEFF au début d’un fichier texte, elle traite généralement le fichier comme un fichier Unicode, bien qu’elle puisse effectuer des vérifications heuristiques supplémentaires pour confirmer. Une telle vérification peut être aussi simple que de tester pour savoir si la variation des octets de faible ordre est beaucoup plus élevée que celle des octets de haut ordre. Par exemple, si un texte ASCII est converti en texte Unicode, chaque deuxième octet est 0. De plus, vérifier à la fois les caractères de saut de ligne et de retour chariot (U+000A et U+000D) et la parité de la taille du fichier peut fournir un fort indicateur de la nature du fichier.

Lorsqu’une application trouve U+FFFE au début d’un fichier texte, elle l’interprète comme signifiant que le fichier est un fichier Unicode inversé. L’application peut soit échanger l’ordre des octets, soit alerter l’utilisateur qu’une erreur s’est produite.

Étant donné que le caractère de marque d’ordre des octets Unicode ne se trouve dans aucune page de code, il disparaît si les données sont converties en ANSI. Contrairement aux autres caractères Unicode, il n’est pas remplacé par un caractère par défaut lorsqu’il est converti. Si une marque d’ordre des octets est trouvée au milieu d’un fichier, elle n’est pas interprétée comme un caractère Unicode et n’a aucun effet sur la sortie du texte.

Remarque

La valeur Unicode U+FFFF est illégale dans les fichiers texte brut et ne peut pas être transférée entre applications. Elle est réservée à l’usage privé d’une application.

 

Utilisation des caractères spéciaux dans Unicode