Substituts et caractères supplémentaires

Les applications Windows utilisent normalement UTF-16 pour représenter les données de caractères Unicode . L’utilisation de 16 bits permet une représentation directe de 65 536 caractères uniques, mais ce plan multilingue de base (BMP) n’est pas suffisant pour couvrir tous les symboles utilisés dans les langues humaines. La version Unicode 4.1 comprend plus de 97 000 caractères, dont plus de 70 000 caractères uniquement pour le chinois.

La norme Unicode a établi 16 « plans » supplémentaires de caractères, chacun de la même taille que le BMP. Naturellement, la plupart des points de code au-delà du BMP n’ont pas encore de caractères affectés, mais la définition des plans donne à Unicode la possibilité de définir 1 114 112 caractères (c’est-à-dire 216 * 17 caractères) dans la plage de points de code U+0000 à U+10FFFF. Pour que UTF-16 représente cet ensemble plus grand de caractères, la norme Unicode définit des « caractères supplémentaires ».

À propos des caractères supplémentaires

Un caractère supplémentaire est un caractère situé au-delà du BMP, et un « substitut » est une valeur de code UTF-16. Pour UTF-16, une « paire de substitution » est nécessaire pour représenter un seul caractère supplémentaire. Le premier substitut (élevé) est une valeur de code 16 bits comprise entre U+D800 et U+DBFF. Le deuxième substitut (faible) est une valeur de code 16 bits comprise entre U+DC00 et U+DFFF. À l’aide du mécanisme de substitution, UTF-16 peut prendre en charge les 1 114 112 caractères Unicode potentiels. Pour plus d’informations sur les caractères supplémentaires, les substituts et les paires de substitution, reportez-vous à La norme Unicode.

Notes

Windows 2000 introduit la prise en charge de l’entrée, de la sortie et du tri simple des caractères supplémentaires. Toutefois, tous les composants système ne sont pas compatibles avec des caractères supplémentaires.

 

Le système d’exploitation prend en charge les caractères supplémentaires des manières suivantes :

  • Le format 12 de la table cmap de police OpenType prend directement en charge le code de caractère de 4 octets. Pour plus d’informations, consultez la spécification de police OpenType.
  • Windows prend en charge les éditeurs de méthode d’entrée activés par substitution.
  • L’API Windows GDI prend en charge le format 12 tables cmap dans les polices afin que les substituts puissent être affichés correctement.
  • L’API Uniscribe prend en charge les caractères supplémentaires.
  • Les contrôles Windows, notamment Modifier et Modifier enrichi, prennent en charge les caractères supplémentaires.
  • Le moteur HTML prend en charge les pages HTML qui incluent des caractères supplémentaires pour l’affichage, la modification (via Outlook Express) et l’envoi de formulaires.
  • La table de tri du système d’exploitation prend en charge des caractères supplémentaires.

Instructions générales pour le développement de logiciels à l’aide de caractères supplémentaires

UTF-16 gère les caractères supplémentaires en tant que paires de substitution. Le système d’exploitation traite une paire de substitution de la même façon qu’il traite les marques de non-espacement. Au moment de l’affichage, la paire de substitution s’affiche sous la forme d’un glyphe au moyen de Uniscribe, tel que prescrit par la norme Unicode.

Windows Vista introduit trois nouvelles macros pour aider à identifier les substituts et les paires de substitution dans les chaînes UTF-16. Il s’agit de IS_HIGH_SURROGATE, de IS_LOW_SURROGATE et de IS_SURROGATE_PAIR.

Les applications prennent automatiquement en charge les caractères supplémentaires s’ils prennent en charge Unicode et utilisent des contrôles système et des fonctions d’API standard, telles que ExtTextOut et DrawText. Par conséquent, si votre application utilise des contrôles système standard ou utilise des appels généraux de type ExtTextOut pour l’affichage, les caractères supplémentaires doivent fonctionner sans codage spécial.

Les applications qui implémentent leur propre prise en charge de l’édition en travaillant des positions de glyphes de manière personnalisée peuvent utiliser Uniscribe pour tout le traitement de texte. Uniscribe a des fonctions distinctes pour traiter le traitement des scripts complexes, comme l’affichage du texte, le test de positionnement et le déplacement du curseur. Une application doit appeler les fonctions Uniscribe spécifiquement pour obtenir ces fonctionnalités avancées. Notez que les applications utilisant les fonctions Uniscribe sont entièrement multilingues, mais cela entraîne une pénalité de performances. Par conséquent, certaines applications doivent effectuer leur propre traitement des caractères supplémentaires.

Étant donné que le mécanisme de substitution pour représenter les caractères supplémentaires est bien défini, votre application peut inclure du code pour gérer le traitement du texte de substitution UTF-16. Lorsque l’application rencontre une valeur UTF-16 séparée de la plage de substitution réservée inférieure (un substitut faible) ou de la plage de substitution réservée supérieure (un substitut élevé), la valeur doit être la moitié d’une paire de substituts. Ainsi, l’application peut détecter une paire de substitution en effectuant une simple vérification de plage. S’il rencontre une valeur UTF-16 dans la plage inférieure ou supérieure, il doit suivre vers l’arrière ou vers l’avant une largeur de 16 bits pour obtenir le reste du caractère. Lorsque vous écrivez votre application, gardez à l’esprit que CharNext et CharPrev se déplacent par points de code 16 bits, et non par paires de substitution.

Notes

Les points de code de substitution autonomes ont un substitut élevé sans substitut inférieur adjacent, ou vice versa. Ces points de code ne sont pas valides et ne sont pas pris en charge. Leur comportement n’est pas défini.

 

Si vous développez une police ou un fournisseur IME, notez que les systèmes d’exploitation antérieurs à Windows XP désactivent la prise en charge des caractères supplémentaires par défaut. Windows XP et versions ultérieures activent les caractères supplémentaires par défaut. Si vous fournissez une police et un package IME qui nécessite des caractères supplémentaires, votre application doit définir les valeurs de Registre suivantes :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack]
SURROGATE=(REG_DWORD)0x00000002

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\42]
IEFixedFontName=[Surrogate Font Face Name]
IEPropFontName=[Surrogate Font Face Name]

Character Sets