Partager via


Jeux de caractères MAPI

S’applique à : Outlook 2013 | Outlook 2016

Les applications clientes et les fournisseurs de services compatibles MAPI peuvent utiliser des caractères ANSI (un octet) ou des caractères Unicode (double octet). Les jeux de caractères OEM ne sont pas pris en charge. Une chaîne OEM passée à une méthode ou fonction MAPI entraîne l’échec de cette méthode ou fonction. Les applications clientes qui fonctionnent avec des noms de fichiers dans le jeu de caractères OEM doivent veiller à les convertir en ANSI avant de les passer à une méthode ou une fonction MAPI.

La prise en charge du jeu de caractères Unicode est facultative, à la fois pour les clients et les fournisseurs de services. Tous les fournisseurs de services doivent écrire leur code afin qu’ils puissent compiler, qu’ils prennent ou non en charge Unicode. Les clients effectuent une compilation conditionnelle, en fonction de leur niveau de support, mais ce n’est pas le cas des fournisseurs de services. Ils ne doivent pas être recompilés lorsque le jeu de caractères change. Rien dans le code du fournisseur de services ne doit être conditionnel.

Lorsque des clients ou des fournisseurs de services qui prennent en charge Unicode effectuent un appel de méthode qui inclut des chaînes de caractères comme paramètres d’entrée ou de sortie, ils définissent l’indicateur MAPI_UNICODE. La définition de cet indicateur indique à l’implémentation que toutes les chaînes entrantes sont des chaînes Unicode. Dans la sortie, la définition de cet indicateur demande que toutes les chaînes transmises à partir de l’implémentation doivent être des chaînes Unicode si possible. Les implémenteurs de méthodes qui prennent en charge Unicode se conforment à la demande ; les implémenteurs de méthodes qui ne fournissent pas de prise en charge Unicode ne seront pas conformes. Les propriétés de chaîne qui ne sont pas au format Unicode sont de type PT_STRING8.

MAPI définit la constante fMapiUnicode dans le fichier d’en-tête MAPIDEFS. H pour représenter le jeu de caractères par défaut. Si un client ou un fournisseur de services prend en charge Unicode, fMapiUnicode est défini sur MAPI_UNICODE. Les clients et les fournisseurs de services qui ne prennent pas en charge Unicode définissent fMapiUnicode sur zéro.

Les fournisseurs de services qui ne prennent pas en charge Unicode doivent :

  • Refuser d’effectuer des conversions entre les jeux de caractères.

  • Ne passez jamais l’indicateur MAPI_UNICODE dans les appels de méthode.

  • Retourne MAPI_E_BAD_CHARWIDTH lorsque l’indicateur MAPI_UNICODE est passé.

  • Déclarez explicitement les propriétés de chaîne ANSI.

Les fournisseurs de services peuvent également retourner MAPI_E_BAD_CHARWIDTH lorsqu’ils prennent uniquement en charge Unicode et que les clients ne passent pas l’indicateur MAPI_UNICODE.

La version actuelle de MAPI prend en charge Unicode dans les méthodes suivantes :

IAddrBook::Address

IAddrBook::CreateOneOff

IAddrBook::Details

IAddrBook::ResolveName

IMAPIProp ::GetLastError (implémentation IAddrBook uniquement)

Pour ces méthodes, les appelants peuvent s’attendre à ce que toutes les chaînes retournées soient des chaînes Unicode. Les chaînes de caractères retournées par les implémentations MAPI de toute autre méthode seront des chaînes de caractères ANSI.