Popravak: Literali niza su misinterpreted po kompilator Visual C++ u Visual Studio 2010 kada literali niza koristite UTF-8 šifriranje i sadrže azijske znakove

Vrijedi za: Visual Studio 2010

Verziju ovog članka koja se odnosi na Microsoft Visual Studio 2008 potražite u 980263 .

Simptomi


Razmotrite sljedeći scenarij:
  • Stvaranje projekta Visual C++ u Microsoft Visual Studio 2010.
  • Datoteke u projektu inicijalizira literali usko niza. Ove literali niza sadrže azijske znakove i nije mjestu sa slovom "L."
  • Datoteka je spremljena pomoću UTF-8 kodiranju.
U ovom scenariju, kada Kompiliranje projekta, literali niza su misinterpreted po na kompilator. Uz to, naiđete na jedan od sljedećih problema:
  • Kada datoteku sadrži oznaku bajt naloga (BOM), Kompiliranje operacija uspije. Međutim, literali niza i dalje prikazuju se nepravilno u generirani aplikacije. Osim toga, možda primiti sljedeću poruku upozorenja kada Kompiliranje projekta:
    C4566 Upozorenje: Znak predstavljene univerzalnog--naziv znaka 'xx' ne može biti predstavljen u trenutna kodna stranica.
  • Kompiliranje operacija neće uspjeti. Osim toga, možda primiti sljedeću poruku o pogrešci kada Kompiliranje projekta:
    Pogreška C2078: Previše initializers
  • Kompiliranje operacija neće uspjeti. Osim toga, možda primiti sljedeću poruku upozorenja kada Kompiliranje projekta:
    C4129 Upozorenje: 'znak': Neprepoznata slijed prespojni znak.

Uzrok


Taj se problem pojavljuje jer u kompilator pretpostavlja literali u datoteci nije može interpretirati kao potencijalnog klijenta bajt MBCS kodiranja umjesto kao Unicode jednog bajta. Zbog ovog problema na kompilator neispravno prevodi datoteku.

Rješenje


Da biste riješili taj problem, primijenite taj hitni popravak s računalom na kojem je Kompiliranje projekt. Zatim, spremiti datoteku s Označi bajt naloga i dodavanje sljedećih smjernica "pragma" neposredno prije literali niza u izvornoj datoteci:
#pragma execution_character_set("utf-8")
Napomena  Ovaj uputa "pragma" postavlja jedinicu prevođenja za izvorne datoteke dok ovo "pragma" uputa zamijenjen je drugi uputa "pragma".

Dodatne informacije o tom hitnom popravku

Informacije o hitnim popravkom

Podržani hitni popravak sada je dostupna iz Microsoft. No on je namijenjen samo ispravku problema opisanog u ovom članku. Primijenite ga samo na sustave u kojima se pojavljuje upravo taj problem. Taj hitni popravak možda dodatno testirati. Stoga, ako vam se ne uzrokuje taj problem, preporučujemo da pričekate sljedeći koja sadrži taj hitni popravak. Da biste odmah riješili taj problem, obratite se Microsoftovoj službi korisničke podrške da biste nabavili hitni popravak. Potpun popis brojeva telefona Microsoftove službe korisničke i informacije o troškovima podrške, posjetite sljedeće Microsoftovo web-mjesto:Napomena  U posebnim slučajevima, ako stručnjak službe podrške za Microsoftove proizvode utvrdi da određeno ažuriranje može riješiti problem, poziv službi podrške može biti besplatan. Uobičajene cijene poziva službi za podršku primjenjuju se na dodatna pitanja i probleme koje nemaju veze s pripadnom nadopunom.

Preduvjeti

Morate imati Microsoft Visual Studio 2010 da biste primijenili taj hitni popravak.

Informacije o ponovnom pokretanju

Ne morate ponovo pokrenuti računalo nakon što primijenite ovaj hitni popravak.

Podaci o datoteci

Engleska verzija ovog hitnog popravka ima atribute datoteka (ili novije atribute datoteka) koji su popisani u sljedećoj tablici. Datumi i vrijeme za te datoteke navedene su u koordiniranom univerzalnom vremenu (UTC). Kada pregledavate informacije o datoteci, pretvara se u lokalnom vremenu. Da biste saznali razliku između UTC i lokalnog vremena, koristite karticu vremenske Zone u stavci Datum i vrijeme na upravljačkoj ploči.
Naziv datotekeVerzija datotekeVeličina datotekeDatumVrijemePlatforma
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 je potvrdio da se taj problem pojavljuje u Microsoftovim proizvodima navedenima u odjeljku "Odnosi se na".