Unicode

Unicode est une norme mondiale d’encodage de caractères. Le système utilise Unicode exclusivement pour la manipulation de caractères et de chaînes. Pour obtenir une description détaillée de tous les aspects d’Unicode, reportez-vous à La norme Unicode.

Par rapport aux mécanismes plus anciens de gestion des données de caractères et de chaînes, Unicode simplifie la localisation des logiciels et améliore le traitement de texte multilingue. En utilisant Unicode pour représenter des données de caractères et de chaînes dans vos applications, vous pouvez activer des fonctionnalités d’échange de données universelles pour le marketing global, à l’aide d’un fichier binaire unique pour chaque code de caractère possible. Unicode effectue les opérations suivantes :

  • Permet à n’importe quelle combinaison de caractères, tirés de n’importe quelle combinaison de scripts et de langages, de coexister dans un seul document.
  • Définit la sémantique pour chaque caractère.
  • Normalise le comportement des scripts.
  • Fournit un algorithme standard pour le texte bidirectionnel.
  • Définit des mappages croisés avec d’autres normes.
  • Définit plusieurs encodages de son jeu de caractères unique : UTF-7, UTF-8, UTF-16 et UTF-32. La conversion des données entre ces encodages est sans perte.

Unicode prend en charge de nombreux scripts utilisés par les langues du monde entier, ainsi qu’un grand nombre de symboles techniques et de caractères spéciaux utilisés pour la publication. Les scripts pris en charge incluent, sans s’y limiter, le latin, le grec, le cyrillique, l’hébreu, l’arabe, le devanagari, le thaï, le han, le hangûl, le hiragana et le katakana. Les langues prises en charge incluent, sans s’y limiter, l’allemand, l’Français, l’anglais, le grec, le russe, l’hébreu, l’arabe, l’hindi, le thaï, le chinois, le coréen et le japonais. Unicode peut actuellement représenter la grande majorité des caractères utilisés par l’ordinateur moderne dans le monde entier, et continue d’être mis à jour pour le rendre encore plus complet.

Les fonctions compatibles avec Unicode sont décrites dans Conventions pour les prototypes de fonction. Ces fonctions utilisent l’encodage UTF-16 (caractères larges), qui est l’encodage le plus courant d’Unicode et celui utilisé pour l’encodage Unicode natif sur les systèmes d’exploitation Windows. Chaque valeur de code a une largeur de 16 bits, contrairement à l’ancienne approche de la page de code pour les données de caractères et de chaîne, qui utilise des valeurs de code 8 bits. L’utilisation de 16 bits permet l’encodage direct de 65 536 caractères. En fait, l’univers des symboles utilisés pour transcrire les langages humains est encore plus grand que celui-ci, et les points de code UTF-16 dans la plage U+D800 à U+DFFF sont utilisés pour former des paires de substitution, qui constituent des encodages 32 bits de caractères supplémentaires. Pour plus d’informations, consultez Substituts et caractères supplémentaires .

Le jeu de caractères Unicode comprend de nombreux caractères combinés, tels que U+0308 (« ̈ »), une dieresis ou umlaut. Unicode peut souvent représenter le même glyphe au format « composé » ou « décomposé » : par exemple, la forme composée de « Ä » est le point de code Unicode unique « Ä » (U+00C4), tandis que sa forme décomposée est « A » + « ̈ » (U+0041 U+0308). Unicode ne définit pas de forme composée pour chaque glyphe. Par exemple, le minuscule vietnamien « o » avec circonflexe et tilde (« ỗ ») est représenté par U+006f U+0302 U+0303 (o + Circonflexe + Tilde). Pour plus d’informations sur la combinaison de caractères et les problèmes connexes, consultez Utilisation de la normalisation Unicode pour représenter des chaînes.

Pour la compatibilité avec les environnements 8 bits et 7 bits, Unicode peut également être encodé en UTF-8 et UTF-7, respectivement. Bien que les fonctions Unicode dans Windows utilisent UTF-16, il est également possible d’utiliser des données encodées en UTF-8 ou UTF-7, qui sont prises en charge dans Windows en tant que pages de code de jeu de caractères multioctets.

Les nouvelles applications Windows doivent utiliser UTF-16 comme représentation de données interne. Windows fournit également une prise en charge étendue des pages de code, et une utilisation mixte dans la même application est possible. Même les nouvelles applications Unicode doivent parfois fonctionner avec des pages de code. Les raisons de ce problème sont abordées dans pages de code.

Une application peut utiliser les fonctions MultiByteToWideChar et WideCharToMultiByte pour convertir entre des chaînes basées sur des pages de code et des chaînes Unicode. Bien que leurs noms fassent référence à « MultiByte », ces fonctions fonctionnent également bien avec les pages de code SBCS ( Jeu de caractères sur un octet), Jeu de caractères double octet (DBCS) et Jeu de caractères multioctets (MBCS).

En règle générale, une application Windows doit utiliser UTF-16 en interne, en convertissant uniquement dans le cadre d’une « couche mince » sur l’interface qui doit utiliser un autre format. Cette technique protège contre la perte et l’altération des données. Chaque page de code prend en charge différents caractères, mais aucune d’entre elles ne prend en charge la gamme complète de caractères fournie par Unicode. La plupart des pages de code prennent en charge différents sous-ensembles, différemment encodés. Les pages de code pour UTF-8 et UTF-7 sont une exception, car elles prennent en charge le jeu de caractères Unicode complet, et la conversion entre ces encodages et UTF-16 est sans perte.

Les données converties directement à partir de l’encodage utilisé par une page de code vers l’encodage utilisé par une autre sont susceptibles d’être endommagées, car la même valeur de données sur différentes pages de code peut encoder un caractère différent. Même lorsque votre application effectue une conversion aussi proche que possible de l’interface, vous devez réfléchir attentivement à la plage de données à gérer.

Les données converties d’Unicode en page de code sont sujettes à une perte de données, car une page de code donnée peut ne pas être en mesure de représenter chaque caractère utilisé dans ces données Unicode particulières. Par conséquent, notez que WideCharToMultiByte peut perdre certaines données si la page de code cible ne peut pas représenter tous les caractères de la chaîne Unicode.

Lors de la modernisation des applications héritées basées sur des pages de code pour utiliser Unicode, vous pouvez utiliser des fonctions génériques et la macro TEXT pour gérer un ensemble unique de sources à partir desquelles compiler deux versions de votre application. Une version prend en charge Unicode et l’autre fonctionne avec les pages de code Windows. À l’aide de ce mécanisme, vous pouvez convertir même des applications très volumineuses à partir de pages de code Windows en Unicode tout en conservant des sources d’application qui peuvent être compilées, générées et testées à toutes les phases de la conversion. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Les caractères unicode et les chaînes utilisent des types de données distincts de ceux des caractères et chaînes basés sur une page de code. En plus d’une série de macros et de conventions de nommage, cette distinction réduit le risque de mélanger accidentellement les deux types de données de caractères. Il facilite la vérification du type du compilateur pour s’assurer que seules les valeurs de paramètre Unicode sont utilisées avec les fonctions qui attendent des chaînes Unicode.

Character Sets

Tri

Substituts et caractères supplémentaires

Utilisation de la normalisation Unicode pour représenter des chaînes