Partager via


Substituts et caractères supplémentaires

Les applications Windows utilisent normalement UTF-16 pour représenter 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 assez suffisant pour couvrir tous les symboles utilisés dans les langues humaines. La version Unicode 4.1 comprend plus de 97 000 caractères, avec plus de 70 000 caractères pour le chinois seul.

La norme Unicode a établi 16 « plans » supplémentaires de caractères, chacune 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 attribués, mais la définition des plans donne au Unicode le potentiel de définir 1 114 112 caractères (autrement dit, 216 * 17 caractères) dans la plage de points de code U+0000 à U+10FFFF. Pour que UTF-16 représente cet ensemble de caractères plus volumineux, la norme Unicode définit « 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 requise pour représenter un caractère supplémentaire unique. La première substitution (élevée) est une valeur de code 16 bits dans la plage U+D800 à U+DBFF. La deuxième substitution (faible) est une valeur de code 16 bits dans la plage U+DC00 à 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 substitutions et les paires de substitution, reportez-vous à l'Standard Unicode.

Note

Windows 2000 introduit la prise en charge des entrées, sorties et tri simples de 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 de la manière suivante :

  • Le format 12 de la table cmap de police OpenType prend directement en charge le code de caractères 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 (IME ) compatibles avec la substitution.
  • L’API Windows GDI prend en charge le format 12 tables cmap dans les polices afin que les substitutions puissent être affichées correctement.
  • L’API Uniscribe prend en charge les caractères supplémentaires.
  • contrôles Windows, y compris Modifier et rich Edit, 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 la soumission de formulaires.
  • La table de tri du système d’exploitation prend en charge les 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’elle traite 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, comme prescrit par la norme Unicode.

Windows Vista introduit trois nouvelles macros pour aider à identifier les paires de substitution et de substitution dans les chaînes UTF-16. Il s’agit IS_HIGH_SURROGATE, IS_LOW_SURROGATEet 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 API standard, telles que ExtTextOut et DrawText. Par conséquent, si votre application utilise des contrôles système standard ou utilise des général extTextOutappels de type à afficher, les caractères supplémentaires doivent fonctionner sans codage spécial.

Les applications qui implémentent leur propre prise en charge d’édition en travaillant des positions de glyphe de manière personnalisée peuvent utiliser Uniscribe pour tous les traitements de texte. Uniscribe dispose de fonctions distinctes pour traiter le traitement de script complexe, comme l’affichage de texte, les tests 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 impose une pénalité de performances. Par conséquent, certaines applications doivent effectuer leur propre traitement de caractères supplémentaires.

Étant donné que le mécanisme de substitution pour représenter des 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 (une faible substitution) ou de la plage de substitution réservée supérieure (une substitution élevée), la valeur doit être une moitié d’une paire de substitution. Ainsi, l’application peut détecter une paire de substitution en effectuant une vérification de plage simple. Si elle rencontre une valeur UTF-16 dans la plage inférieure ou supérieure, elle doit suivre l’arrière ou l’avant une largeur 16 bits pour obtenir le reste du caractère. Lorsque vous écrivez votre application, gardez à l’esprit que CharNext et CharPrev déplacer par des points de code 16 bits, et non par paires de substitution.

Note

Les points de code de substitution autonomes ont un substitut élevé sans substitution basse adjacente, ou inversement. 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 nécessitant 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]

jeux de caractères