Ressources

Wikipedia

  • Codage des caractères / Character encoding
  • Unicode Le nombre après UTF (Universal Transformation Format) représente le nombre minimal de bits des codets avec lesquels un point de code valide est représenté.
    • UTF-8 est le plus commun pour les applications Unix et Internet. Son codage de taille variable lui permet d'être en moyenne moins coûteux en occupation mémoire. Mais cela ralentit nettement les opérations où interviennent des extractions de sous-chaînes, car il faut compter les caractères depuis le début de la chaîne pour savoir où se trouve le premier caractère à extraire. L'UTF-8 assure aussi, et c'est son principal avantage, une compatibilité avec les manipulations simples de chaînes en ASCII dans les langages de programmation. Ainsi, les programmes écrits en C peuvent souvent fonctionner sans modification. Son avantage sur l'UTF-16 (et l'UTF-32) est que les différences d'ordonnancement des octets composant un mot (endianness) ne posent pas de problème dans un réseau de systèmes hétérogènes ; ainsi, cette transformation est utilisée aujourd'hui par la plupart des protocoles d'échange normalisés.
    • UTF-16
    • UTF-32
  • ISO 8859 ISO 8859 est une norme commune de codage de caractères sur 8 bits pour le traitement informatique du texte.
    • ISO 8859-1 (Latin-1 ou Europe occidentale) 191 caractères de l'alphabet latin, chacun d'entre eux étant codé par un octet (soit 8 bits). Une révision de 8859-1 qui abandonne quelques symboles peu utilisés, les remplaçant avec le symbole de l'euro € et les lettres Š, š, Ž, ž, Œ, œ, et Ÿ, ce qui complète la couverture du français.
    • ISO 8859-15 (Latin-9)
  • Windows-1252 ou CP1252, cet encodage subit la concurrence et le développement d'Unicode. Il diffère de l'ISO-8859-1 par l'utilisation de caractères imprimables, plutôt que des caractères de contrôle, dans les codes 128 à 159.
  • ASCII (American Standard Code for Information Interchange)
  • MCS (Multinational Character Set) est considéré comme à la fois l'ancêtre de l'ISO 8859-1 et de l'Unicode.
  • L'ANSI (American National Standards Institute) est le représentant des États-Unis à l'ISO (Organisation internationale de normalisation).

Le codage UTF-8 est approuvé par l'Internet Engineering Task Force (IETF), qui suit ses évolutions dans le Standard Track BCP 63 ; il est également approuvé par le World Wide Web Consortium (W3C), et la plupart des organismes de normalisation nationaux.

L'IETF requiert maintenant que UTF-8 soit pris en charge par défaut (et non pas simplement supporté en tant qu'extension) par tous les nouveaux protocoles de communication d'Internet (publiés dans ses RFC numérotées) qui échangent du texte (les plus anciens protocoles n'ont toutefois pas été modifiés pour rendre ce support obligatoire, mais seulement étendus si possible, pour le supporter de façon optionnelle, si cela produit des incompatibilités ou introduit de nouveaux risques de sécurité : c'est le cas de protocoles Internet très utilisés comme DNS, HTTP, FTP, Telnet et de HTML dans ses versions initiales non normalisées par le W3C).

Les normes de codage Unicode et UCS utilisent des séquences de un à quatre codes de 8 bits (UTF-8), des séquences de un ou deux codes de 16 bits (UTF-16), ou une valeur de code de 32 bits (UTF-32 ou UCS-4). Il existe également un codage plus ancien qui utilise une valeur de 16 bits (UCS-2) mais qui n'est capable de représenter qu'un dix-septième des points de code disponibles : sur la totalité des points de code définis par Unicode, seuls ceux du BMP (Basic Multilingual Plane), c'est-à-dire ceux compris entre U+0000 et U+FFFF, sont supportés par UCS-2. Parmi ces formes de codages, seul UTF-8 présente les suites d'octets dans un ordre fixe ; les autres sont sujets au problème lié à la manière dont les plate-formes codent les suites de 16 et 32 bits (voir sur ce point l'opposition gros-boutiste et petit-boutiste). Ce problème peut être résolu grâce à des codes spéciaux ou par des indications hors bande.

Unicode

Jeu de caractères codés (Coded Character Set)

« jeu de caractères codés universel » (Universal Coded Character Set, souvent abrégé en UCS)

Mécanisme de sérialisation des caractères (Character Encoding Scheme)

Cette couche s'occupe de sérialiser les unités de stockage définies par la couche du dessus. C'est ici que se traite l'opposition entre gros boutiens (octet le plus significatif d'abord) et petits boutiens (octet le moins significatif d'abord).

C'est également ici qu'on spécifie la marque de boutianité (BOM, pour Byte Order Mark) qui permet d'indiquer en début de fichier s'il est en gros boutien ou en petit boutien. Dans le monde Internet, on l'utilise rarement, en préférant un marquage explicite (“charset=UTF-16BE” en MIME, par exemple, pour indiquer un flot de données gros boutien, où BE signifie Big Endian).

La limite de l'octet

Contrairement aux normes précédentes, Unicode sépare la définition du jeu de caractères (la liste des caractères, leur nom et leur index, le point de code) de celle du codage. Ainsi, on ne peut donc pas parler de la taille d'un caractère Unicode, car elle dépend du codage choisi.

Là où l'ASCII utilisait jadis 7 bits et ISO 8859-1 8 bits (comme la plupart des pages de codes nationales), Unicode, qui rassemble les caractères de chaque page de code, avait besoin d'utiliser plus que les 8 bits d'un octet. La limite fut dans un premier temps fixée à 16 bits pour les premières versions d'Unicode, et à 32 bits pour les premières versions de la norme ISO/CEI 10646.

Autres ressources sur les jeux de caractères

  • Codages ANSI et UTF-8 des caractères
  • Introduction aux jeux de caractères
  • Les codages ASCII, ISO-8859-1, Windows-1252 et MacRoman
    • ASCII : ne permet pas d'écrire les langues européennes qui utilisent des lettres avec diacritiques (accents, cédille, autres joyeusetés). Bref, on ne peut pas écrire en français avec de l'ASCII.
    • ISO-8859-1 ou Latin-1 : permet d'écrire la plupart des langues d'Europe de l'Ouest. Presque tous les caractères du français y sont (manque le œ).
    • ISO-8859-15 ou Latin-9 : ajout du caractère œ et du symbole monétaire € (Euro).
    • Windows-1252 ou CP1252 : si un logiciel parle de codage «ANSI», il parle sans doute de Windows-1252.
    • Quel codage choisir? Le plus simple est d'utiliser le codage UTF-8, en particulier pour la création d'un nouveau site web. Les codages que nous venons de passer en revue donnent accès à un jeu très limité de caractères (jusqu'à 218 pour le plus riche). À l'inverse, UTF-8 est un codage de la famille Unicode, qui permet d'écrire n'importe quel caractère existant dans n'importe quelle langue ou presque. Ce codage «universel» rencontre un fort succès: depuis janvier 2010, plus de la moitié des pages sur le Web sont en UTF-8.
  • Charset iso-8859-1, iso-8859-15, utf-8, lequel choisir ? Une bonne partie des désavantages de l'iso-8859-1 proviennent de sa définition même, alors que ceux de l'utf-8 disparaissent petit-à-petit.

Exemple dans les entêtes et dans le corps d'un document HTML permettant de mentionner que le document a été créé en utilisant le jeu de caractères codés ISO-8859-1 et dans un document XML permettant de préciser de la même façon que le jeu de caractères codés utilisé pour créer le document est bien ISO-8859-1.

HYML (entête) : Content-Type: text/html; charset=iso-8859-1
HTML : <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> 
XML : <?xml version="1.0" encoding="iso-8859-1"?>
  • charset : character encoding