Pour qu'un ordinateur puisse stocker du texte et des nombres que les humains peuvent comprendre, il doit y avoir un code qui transforme personnages en chiffres. La norme Unicode définit un tel code en utilisant le codage de caractères.
La raison pour laquelle le codage des caractères est si important est que chaque appareil peut afficher les mêmes informations. Un schéma de codage de caractères personnalisé peut fonctionner brillamment sur un ordinateur, mais des problèmes se produisent lorsque vous envoyez ce même texte à quelqu'un d'autre. Il ne saura de quoi vous parlez que s'il comprend également le schéma de codage.
Encodage de caractère
Tout l'encodage de caractères ne fait qu'attribuer un numéro à chaque caractère qui peut être utilisé. Vous pouvez faire un encodage de caractères dès maintenant.
Par exemple, je pourrais dire que la lettre UNE devient le nombre 13, a = 14, 1 = 33, # = 123, etc.
C'est là que les normes de l'industrie entrent en jeu. Si l'ensemble de l'industrie informatique utilise le même schéma de codage de caractères, chaque ordinateur peut afficher les mêmes caractères.
Qu'est-ce que l'Unicode?
ASCII (American Standard Code for Information Interchange) est devenu le premier schéma de codage répandu. Cependant, il est limité à seulement 128 définitions de caractères. C'est bien pour les caractères anglais les plus courants, les chiffres et la ponctuation, mais c'est un peu limitant pour le reste du monde.
Naturellement, le reste du monde veut également le même schéma de codage pour leurs personnages. Cependant, pendant un petit moment, tout en fonction de l'endroit où vous vous trouviez, un caractère différent peut avoir été affiché pour le même code ASCII.
À la fin, les autres parties du monde ont commencé à créer leurs propres schémas d'encodage, et les choses ont commencé à devenir un peu confuses. Non seulement les schémas de codage étaient de différentes longueurs, mais les programmes devaient déterminer quel schéma de codage ils étaient censés utiliser.
Il est devenu évident qu'un nouveau schéma de codage des caractères était nécessaire, c'est à ce moment que la norme Unicode a été créée. L'objectif d'Unicode est d'unifier tous les différents schémas d'encodage afin que la confusion entre les ordinateurs puisse être limitée autant que possible.
De nos jours, la norme Unicode définit des valeurs pour plus de 128 000 caractères et peut être vue sur le Consortium Unicode. Il a plusieurs formes d'encodage de caractères:
- UTF-8: Utilise uniquement un octet (8 bits) pour coder les caractères anglais. Il peut utiliser une séquence d'octets pour coder d'autres caractères. UTF-8 est largement utilisé dans les systèmes de messagerie et sur Internet.
- UTF-16: Utilise deux octets (16 bits) pour coder les caractères les plus couramment utilisés. Si nécessaire, les caractères supplémentaires peuvent être représentés par une paire de nombres de 16 bits.
- UTF-32: Utilise quatre octets (32 bits) pour coder les caractères. Il est devenu évident qu'à mesure que la norme Unicode se développait, un nombre de 16 bits était trop petit pour représenter tous les caractères. UTF-32 est capable de représenter chaque caractère Unicode comme un seul chiffre.
Remarque: UTF signifie Unité de transformation Unicode.
Points de code
Un point de code est la valeur donnée à un caractère dans la norme Unicode. Les valeurs selon Unicode sont écrites sous forme de nombres hexadécimaux et ont un préfixe de U +.
Par exemple, pour coder les caractères que nous avons examinés précédemment:
- UNE est U + 0041
- une est U + 0061
- 1 est U + 0031
- # est U + 0023
Ces points de code sont divisés en 17 sections différentes appelées avions, identifiées par les numéros 0 à 16. Chaque avion détient 65 536 points de code. Le premier plan, 0, contient les caractères les plus couramment utilisés et est connu sous le nom de plan multilingue de base (BMP).
Unités de code
Les schémas de codage sont constitués d'unités de code, qui sont utilisées pour fournir un index pour l'emplacement d'un caractère sur un plan.
Prenons l'exemple de l'UTF-16. Chaque numéro de 16 bits est une unité de code. Les unités de code peuvent être transformées en points de code. Par exemple, le symbole de note plate ♭ a un point de code U + 1D160 et vit sur le deuxième plan de la norme Unicode (plan idéographique supplémentaire). Il serait codé en utilisant la combinaison des unités de code 16 bits U + D834 et U + DD60.
Pour le BMP, les valeurs des points de code et des unités de code sont identiques. Cela permet un raccourci pour UTF-16 qui économise beaucoup d'espace de stockage. Il ne doit utiliser qu'un seul numéro de 16 bits pour représenter ces caractères.
Comment Java utilise-t-il Unicode?
Java a été créé à l'époque où la norme Unicode avait des valeurs définies pour un jeu de caractères beaucoup plus petit. À l'époque, on pensait que 16 bits seraient plus que suffisants pour coder tous les caractères qui seraient nécessaires. Dans cet esprit, Java a été conçu pour utiliser UTF-16. Le type de données char était à l'origine utilisé pour représenter un point de code Unicode 16 bits.
Depuis Java SE v5.0, le caractère représente une unité de code. Cela fait peu de différence pour représenter les caractères qui se trouvent dans le plan multilingue de base car la valeur de l'unité de code est la même que le point de code. Cependant, cela signifie que pour les personnages des autres avions, deux caractères sont nécessaires.
La chose importante à retenir est qu'un seul type de données char ne peut plus représenter tous les caractères Unicode.