Update: Zeichenfolgenliterale sind falsch vom Visual C++-Compiler in Visual Studio 2010 die Zeichenfolgenliterale verwenden UTF-8-Kodierung und asiatischen Zeichen

Gilt für: Visual Studio 2010

Eine Microsoft Visual Studio 2008-Version dieses Artikels finden Sie unter 980263 .

Problembeschreibung


Stellen Sie sich folgendes Szenario vor:
  • Erstellen Sie ein Visual C++-Projekt in Microsoft Visual Studio 2010.
  • Eine Datei im Projekt initialisiert schmale Zeichenfolgenliterale. Diese Zeichenfolgenliterale asiatische Zeichen enthalten und nicht mit dem Buchstaben "L" vorangestellt
  • Die Datei wurde mit UTF-8-Kodierung gespeichert.
In diesem Szenario werden die Zeichenfolgenliterale beim Kompilieren des Projekts vom Compiler interpretiert. Außerdem tritt möglicherweise eines der folgenden Probleme:
  • Wenn die Datei einer Byte Order Mark (BOM) erfolgreich kompilieren Vorgang. Die Zeichenfolgenliterale werden in der generierten Anwendung jedoch weiterhin falsch angezeigt. Außerdem erhalten Sie die folgende Warnung angezeigt, wenn Sie das Projekt kompilieren:
    Warnung C4566: generiert Durch den universellen Zeichennamen 'Xx' dargestellte Zeichen kann in der aktuellen Codepage dargestellt werden.
  • Die Kompilierung schlägt fehl. Außerdem erhalten Sie folgende Fehlermeldung, wenn Sie das Projekt kompilieren:
    C2078 generiert Fehler: Zu viele Initialisierer
  • Die Kompilierung schlägt fehl. Außerdem erhalten Sie die folgende Warnung angezeigt, wenn Sie das Projekt kompilieren:
    Warnung C4129 generiert: 'Zeichen': nicht erkannte Escapesequenz.

Ursache


Dieses Problem tritt auf, weil der Compiler davon aus, dass Literale in der Datei als führendes Byte der MBCS anstelle von Single-Byte-Unicode-Codierung interpretiert werden konnte. Aufgrund dieses Problems übersetzt der Compiler fälschlicherweise die Datei.

Lösung


Zum Beheben dieses Problems wenden Sie dieses Hotfix auf dem Computer, auf dem Sie das Projekt kompilieren. Anschließend speichern Sie die Datei mit einer Bytereihenfolge-Markierung, und fügen Sie "Pragma" Direktive vor die Zeichenfolgenliterale in der Quelldatei:
#pragma execution_character_set("utf-8")
Hinweis Diese "Pragma" Richtlinie Übersetzungseinheit Quelldatei bis dieser Richtlinie "Pragma" anderen "Pragma" Richtlinie ersetzt.

Weitere Informationen zu diesem Update

Informationen zum Hotfix

Ein unterstützter Hotfix ist inzwischen von Microsoft erhältlich. Es soll jedoch nur das Problem beheben, das in diesem Artikel beschrieben wird. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise noch getestet. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir, die nächste warten, das diesen Hotfix enthält. Wenn dieses Problem sofort beheben möchten, wenden Sie sich an Microsoft Support Services, um den Hotfix zu erhalten. Eine vollständige Liste der Telefonnummern des Microsoft Product Support Services und Informationen zu den Supportkosten finden Sie auf folgender Microsoft-Website:Hinweis In bestimmten Fällen können Gebühren, die normalerweise für Support-Anrufe anfallen abgebrochen werden, wenn ein Microsoft-Supportmitarbeiter feststellt, dass ein bestimmtes Update Ihr Problem behebt. Die normalen Supportkosten gilt für zusätzliche Supportfragen und Probleme, die nicht für das betreffende Update qualifizieren.

Voraussetzungen

Sie müssen Microsoft Visual Studio 2010 installiert, um diesen Hotfix anwenden.

Informationen zum Neustart

Sie müssen keinen Neustart des Computers nach der Installation dieses Hotfixes durchführen.

Dateiinformationen

Die englische Version dieses Hotfixes weist die in der nachstehenden Tabelle aufgelisteten Dateiattribute (oder höher) auf. Datums- und Uhrzeitangaben für diese Dateien sind in der "Universal Time Coordinated" (UTC) angegeben. Wenn Sie die Dateiinformationen anzeigen, werden diese Angaben in die Ortszeit umgewandelt. Den Unterschied zwischen UTC- und Ortszeit können Sie in der Systemsteuerung unter Datum und Uhrzeit mithilfe der Angaben auf der Registerkarte Zeitzone ermitteln.
DateinameDateiversionDateigrößeDatumUhrzeitPlattform
C1.dll16.0.30319.351658,24023-Aug-201006:45x86
C1.dll16.0.30319.351723,77623-Aug-201006:45x86
C1.dll16.0.30319.351899,40023-Aug-201006:45x86
C1xx.dll16.0.30319.3512,286,92023-Aug-201006:45x86
C1xx.dll16.0.30319.3512,428,23223-Aug-201006:45x86
C1xx.dll16.0.30319.3512,659,66423-Aug-201006:45x86
Clui.dll16.0.30319.351201,03223-Aug-201006:45x86
Clui.dll16.0.30319.351202,56823-Aug-201006:45x86
Clui.dll16.0.30319.351219,97623-Aug-201006:45x86
Clui.dll16.0.30319.351221.00023-Aug-201006:45x86
Clui.dll16.0.30319.351290,63223-Aug-201006:45x86
Clui.dll16.0.30319.351291,65623-Aug-201006:45x86
Clui.dll16.0.30319.351292,68023-Aug-201006:45x86
Clui.dll16.0.30319.351293,70423-Aug-201006:45x86
Clui.dll16.0.30319.351408,39223-Aug-201006:45x86
Clui.dll16.0.30319.351408,90423-Aug-201006:45x86
Clui.dll16.0.30319.351450,37623-Aug-201006:45x86
Clui.dll16.0.30319.351460,10423-Aug-201006:45x86
Clui.dll16.0.30319.351460,61623-Aug-201006:45x86
Clui.dll16.0.30319.351478,02423-Aug-201006:45x86
Clui.dll16.0.30319.351478,53623-Aug-201006:45x86
Clui.dll16.0.30319.351483,65623-Aug-201006:45x86
Clui.dll16.0.30319.351484,16823-Aug-201006:45x86
Clui.dll16.0.30319.351486,72823-Aug-201006:45x86
Clui.dll16.0.30319.351487,24023-Aug-201006:45x86
Clui.dll16.0.30319.351491,84823-Aug-201006:45x86
Clui.dll16.0.30319.351492,36023-Aug-201006:45x86

Status


Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.