KORRIGERA: Stränglitteraler är feltolkas av Visual C++-kompileraren i Visual Studio 2010 när stränglitteraler använder UTF-8-kodning och innehåller asiatiska tecken

Gäller för: Visual Studio 2010

En version av denna artikel för Microsoft Visual Studio 2008 för att se 980263 .

Symptom


Tänk dig följande situation:
  • Du skapar ett Visual C++-projekt i Microsoft Visual Studio 2010.
  • En fil i projektet initierar smal stränglitteraler. Dessa stränglitteraler innehåller asiatiska tecken och inleds inte med bokstaven ”l”.
  • Filen sparades med hjälp av UTF-8-kodning.
I det här fallet, när du kompilerar projektet, är stränglitteraler feltolkas av kompilatorn. Dessutom händer något av följande problem:
  • Om filen innehåller en byte-ordningsmarkering (BOM), slutförs kompilera åtgärden. Men visas stränglitteraler fortfarande felaktigt i genererade programmet. Dessutom kan du få följande varningsmeddelande när du kompilerar projektet:
    Varning C4566: Tecken representeras av universal tecken namn 'xx' kan inte representeras i den aktuella teckentabellen.
  • Kompilera misslyckas. Dessutom kan du få följande felmeddelande när du kompilerar projektet:
    Fel C2078: För många initieringar
  • Kompilera misslyckas. Dessutom kan du få följande varningsmeddelande när du kompilerar projektet:
    Varning C4129: 'tecken': okänt tecken escape-sekvens.

Orsak


Det här problemet uppstår eftersom kompilatorn förutsätter att strängar i filen kan tolkas som den inledande byten av MBCS kodning i stället för som enkelbyte-Unicode. Problemet medför översätter filen felaktigt av kompilatorn.

Lösning


Lös problemet genom att installera den här snabbkorrigeringen till datorn som du kompilerar projektet. Sedan spara filen med ett byte-ordningsmarkering och Lägg sedan till följande ”pragma” direktiv innan stränglitteraler i källfilen:
#pragma execution_character_set("utf-8")
Obs! Detta direktiv ”pragma” anger översättning enhet för källfilen tills detta direktiv ”pragma” skall ersättas med en annan ”pragma” direktiv.

Mer information om snabbkorrigeringen

Information om snabbkorrigeringen

En snabbkorrigering är nu tillgänglig från Microsoft. Den är emellertid avsedd att åtgärda det problem som beskrivs i denna artikel. Använd den bara på datorer där detta problem uppstår. Snabbkorrigeringen kan komma att testas igen. Om inte störs alltför mycket av detta problem rekommenderar vi att du väntar på nästa som innehåller den här snabbkorrigeringen. Om du vill lösa problemet omedelbart kontaktar du Microsoft support för att få snabbkorrigeringen. En fullständig lista över telefonnummer till Microsoft Customer Support Services och information om supportkostnader finns på följande Microsoft-webbplats:Obs! I vissa fall kan supporten vara avgiftsfri, t.ex. om en supporttekniker kommer fram till att problemet kan lösas med en viss uppdatering. Normala supportavgifter tas ut för ytterligare supportfrågor och problem som inte gäller den aktuella uppdateringen.

Förutsättningar

Du måste ha Microsoft Visual Studio 2010 installerat för att kunna installera den här snabbkorrigeringen.

Information om omstart

Du behöver inte starta om datorn när du har installerat den här snabbkorrigeringen.

Filinformation

Den engelska versionen av den här snabbkorrigeringen har de filattribut (eller senare filattribut) som visas i följande tabell. Datum och tider för dessa filer anges i UTC-tid (UTC). När du visar filinformationen konverteras den till lokal tid. Använd fliken tidszon i datum och tid på Kontrollpanelen om du vill se skillnaden mellan UTC-tid och lokal tid.
FilnamnFilversionStorlekDatumTidPlattform
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 har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet ”gäller”.