Unicode
Unicode est une norme d’encodage de caractères mondiale. Le système utilise exclusivement Unicode 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 à l'Standard 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ée de n’importe quelle combinaison de scripts et de langages, de coexister dans un document unique.
- Définit la sémantique pour chaque caractère.
- Normalise le comportement du script.
- Fournit un algorithme standard pour le texte bidirectionnel.
- Définit des mappages croisés à 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 de 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 dans la publication. Les scripts pris en charge incluent, mais ne sont pas limités à, latin, grec, cyrillique, hébreu, arabe, devanagari, thaï, han, hangûl, Hiragana et Katakana. Les langues prises en charge incluent, mais ne sont pas limitées à, l’allemand, le 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 les ordinateurs modernes dans le monde entier, et continue d’être mis à jour pour le rendre encore plus complet.
Les fonctions compatibles Unicode sont décrites dans Conventions pour les prototypes de fonction. Ces fonctions utilisent l’encodage UTF-16 (caractère large), 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 est de 16 bits, contrairement à l’ancienne page de codes approche des données de caractères et de chaînes, 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 des langages humains est encore plus grand que cela, 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 combinaison de dierèse ou umlaut. Unicode peut souvent représenter le même glyphe dans un formulaire « composé » ou « décomposé » : par exemple, la forme composée de « Ä » est le point de code Unicode unique « Ä » (U+00C4), tandis que son formulaire décomposé est « A » + « ̈ » (U+0041 U+0308). Unicode ne définit pas de formulaire composé pour chaque glyphe. Par exemple, le minuscule vietnamien « o » avec circonflexe et tilde (« ỗ ») est représenté par U+006f U+0302 U+0303 (o + Circflexe + Tilde). Pour plus d’informations sur la combinaison de caractères et de 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 compatibles Unicode dans Windows utilisent UTF-16, il est également possible d’utiliser des données encodées dans UTF-8 ou UTF-7, qui sont prises en charge dans Windows en tant que jeu de caractères multioctets pages de code.
Les nouvelles applications Windows doivent utiliser UTF-16 comme représentation interne des données. 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 codes.
Une application peut utiliser les fonctions MultiByteToWideChar et WideCharToMultiByte pour effectuer une conversion entre des chaînes basées sur des pages de code et des chaînes Unicode. Bien que leurs noms font référence à « MultiOctet », ces fonctions fonctionnent également bien avec jeu de caractères à octet unique (SBCS), jeu de caractères à deux octets (DBCS) et des pages de codes de 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 se défend contre la perte et la corruption des données. Chaque page de codes prend en charge différents caractères, mais aucun d’entre eux ne prend en charge le spectre complet des caractères fournis par Unicode. La plupart des pages de code prennent en charge différents sous-ensembles, encodés différemment. Les pages de codes 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 codes vers l’encodage utilisé par un autre sont susceptibles d’être endommagées, car la même valeur de données sur différentes pages de codes peut encoder un caractère différent. Même lorsque votre application se convertit aussi près de l’interface que possible, vous devez réfléchir soigneusement à la plage de données à gérer.
Les données converties d’Unicode en page de codes sont soumises à une perte de données, car une page de codes 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 codes 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 codes pour utiliser Unicode, vous pouvez utiliser des fonctions génériques et la macro TEXT pour conserver un ensemble unique de sources à partir desquels compiler deux versions de votre application. Une version prend en charge Unicode et l’autre fonctionne avec les pages de codes Windows. À l’aide de ce mécanisme, vous pouvez convertir même des applications très volumineuses 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 des chaînes basés sur des pages de codes. En plus d’une série de macros et de conventions d’affectation de noms, cette distinction réduit le risque de mélanger accidentellement les deux types de données caractères. Il facilite la vérification du type du compilateur pour s’assurer que seules les valeurs de paramètres Unicode sont utilisées avec les fonctions qui attendent des chaînes Unicode.
Rubriques connexes