Objawy
Rozważ następujący scenariusz:
-
Utwórz projekt języka Visual C++ w Microsoft Visual Studio 2008 z dodatkiem Service Pack 1 (SP1).
-
Plik w projekcie ma wąskie literały. Literały te zawierają znaki azjatyckie i nie są poprzedzone literą "L".
-
Literały ciągów znaków Użyj kodowania UTF-8.
W tym scenariuszu podczas kompilowania projektu, literały ciągów znaków są błędnie interpretowane przez kompilator. Ponadto pojawić się jeden z następujących problemów:
-
Operacja kompilacji zakończy się pomyślnie. Jednakże literały ciągów znaków są wyświetlane niepoprawnie w generowanych aplikacji. Ponadto może także pojawić następujące komunikaty ostrzegawcze podczas kompilowania projektu:
Ostrzeżenie C4566: znak reprezentowany przez uniwersalny charakter nazwę 'xx' nie można przedstawić w bieżącej strony kodowej.
-
Operacja kompilacji nie powiedzie się. Ponadto podczas kompilowania projektu może zostać wyświetlony następujący komunikat o błędzie:
Błąd C2078: zbyt wiele inicjatory
Przyczyna
Ten problem występuje, ponieważ kompilator zakłada, że plik w sekcji "Symptomy" ma kodowania MBCS. Z tego powodu compilerincorrectly tłumaczy pliku.
Rozwiązanie
Informacje o poprawce
Obsługiwana poprawka jest udostępniana przez firmę Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Tylko w systemach, których dotyczy ten problem, należy zastosować tę poprawkę.
Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, należy przesłać żądanie do centrum obsługi klienta firmy Microsoft i obsługi technicznej w celu uzyskania poprawki.
Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej i obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi, odwiedź następującą witrynę firmy Microsoft w sieci Web:
http://support.microsoft.com/contactus/?ws=supportUwaga "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka.
Wymagania wstępne
Musi mieć Visual Studio 2008 z dodatkiem Service Pack 1 (SP1) zainstalować tę poprawkę.
Wymagania dotyczące ponownego uruchomienia
Nie trzeba ponownie uruchomić komputer po zastosowaniu tej poprawki, jeśli jest używane żadne wystąpienie programu Visual Studio.
Informacje dotyczące zastępowania poprawek
Ta poprawka nie zastępuje inne poprawki.
Informacje o plikach
Wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom zostały podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w aplecie Data i godzina w Panelu sterowania.
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Platforma |
---|---|---|---|---|---|
C1.dll |
15.0.30729.4987 |
678,720 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,204,488 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,215,240 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,339,656 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,505,552 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,891,592 |
09-Mar-2010 |
10:18 |
x64 |
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.
Więcej informacji
Aby rozwiązać błąd kompilatora, należy zainstalować tę poprawkę, a następnie zapisz plik wraz z znacznik kolejności bajtów. Ponadto należy dodać następującą dyrektywę "pragmy" tuż przed literały ciągów znaków w pliku źródłowym.
#pragma execution_character_set("utf-8")
Uwaga Dyrektywa "pragmy" ustawia jednostki tłumaczenia dla pliku źródłowego, aż dyrektywa "pragmy" zastępuje się wyrazami dyrektywa "pragmy" innego.