CORRECTIF : Les littéraux de chaîne sont interprétés de façon erronée par le compilateur Visual C++ dans Visual Studio 2008 Service Pack 1 lorsque les littéraux de chaîne, utilisent le codage UTF-8 et contiennent des caractères asiatiques


Symptômes


Considérez le scénario suivant :
  • Vous créez un projet Visual C++ dans Microsoft Visual Studio 2008 Service Pack 1 (SP1).
  • Un fichier dans le projet a des littéraux de chaîne étroite. Ces littéraux de chaîne contient des caractères asiatiques et n’est pas précédés de la lettre « l ».
  • Les littéraux de chaîne utilisent l’encodage UTF-8.
Dans ce scénario, lorsque vous compilez le projet, les littéraux de chaîne sont mal interprétés par le compilateur. En outre, vous rencontrez l’un des problèmes suivants :
  • L’opération de compilation réussit. Toutefois, les littéraux de chaîne sont affichés correctement dans l’application générée. En outre, vous pouvez également recevoir des messages d’avertissement suivants lorsque vous compilez le projet :
    avertissement C4566 : caractère représenté par le nom de caractère universel 'xx' ne peut pas être représenté dans la page de codes actuelle.
  • La compilation échoue. En outre, le message d’erreur suivant peut s’afficher lorsque vous compilez le projet :
    erreur C2078 : trop d’initialiseurs

Cause


Ce problème se produit car le compilateur suppose que le fichier dans la section « Symptômes » a codage de MBCS. En raison de ce comportement, le compilerincorrectly convertit le fichier.

Résolution


Informations sur le correctif

Un correctif pris en charge est disponible auprès de Microsoft. Toutefois, ce correctif vise à corriger uniquement le problème décrit dans cet article. Appliquez ce correctif uniquement aux systèmes rencontrant ce problème spécifique.

Si le correctif est disponible pour le téléchargement, il existe une section « Téléchargement de correctif logiciel disponible » au début de cet article de la Base de connaissances. Si cette section n’apparaît pas, soumettez une demande au Service Clients et Support de Microsoft pour obtenir le correctif.

Remarque Si des problèmes supplémentaires se produisent ou si des procédures de dépannage sont nécessaires, vous devrez peut-être formuler une demande de service distincte. Les coûts habituels du support technique s'appliqueront aux questions et problèmes qui ne relèvent pas de ce correctif logiciel. Pour une liste complète des numéros de téléphone du Service clientèle et support technique de Microsoft ou pour créer une demande de service distincte, visitez le site Web de Microsoft à l'adresse suivante :Remarque Le formulaire « Téléchargement de correctif logiciel disponible » affiche les langues pour lesquelles le correctif est disponible. Si vous ne voyez pas votre langue, c'est parce qu'il n'y a pas de correctif disponible pour cette langue.

Conditions préalables

Vous devez disposer de Visual Studio 2008 Service Pack 1 (SP1) pour appliquer ce correctif.

Nécessite un redémarrage

Vous n’êtes pas obligé de redémarrer l’ordinateur après avoir appliqué ce correctif logiciel si aucune instance de Visual Studio n’est utilisé.

Informations de remplacement du correctif

Ce correctif n’en remplace pas d’autres correctifs.

Informations sur les fichiers

La version anglaise de ce correctif dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont répertoriées en temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, elles sont converties en heure locale. Pour trouver la différence entre l’UTC et l’heure locale, utilisez l’onglet fuseau horaire dans l’élément de Date et heure dans le panneau de configuration.
Nom de fichierVersion de fichierTaille du fichierDateHeurePlateforme
C1.dll15.0.30729.4987678,72009-Mar-201010:18x86
C1xx.dll15.0.30729.49872,204,48809-Mar-201010:18x86
C1xx.dll15.0.30729.49872,215,24009-Mar-201010:18x86
C1xx.dll15.0.30729.49872,339,65609-Mar-201010:18x86
C1xx.dll15.0.30729.49872,505,55209-Mar-201010:18x86
C1xx.dll15.0.30729.49872,891,59209-Mar-201010:18x64

État


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations


Pour résoudre l’erreur de compilateur, installez ce correctif logiciel et puis enregistrez le fichier avec une marque d’ordre d’octet. En outre, ajoutez la directive suivante « pragma » juste avant les littéraux de chaîne dans le fichier source.

#pragma execution_character_set("utf-8")
Remarque La directive « pragma » définit l’unité de traduction pour le fichier source jusqu'à ce que la directive « pragma » est remplacée par une autre directive « pragma ».