ИСПРАВИТЬ: Строковые литералы интерпретируются ошибочно компилятором Visual C++ в Пакет обновления 1 для Visual Studio 2008 при строковые литералы использовать кодировку UTF-8 и содержат знаки азиатских языков


Симптомы


Рассмотрим следующий сценарий:
  • Создание проекта Visual C++ в Visual Studio 2008 Пакет обновления 1 (SP1).
  • Файл проекта имеет узкий строковых литералов. Эти строковые литералы, содержащие знаков азиатских языков и не начинаются с буквы «м».
  • Строковые литералы использовать кодировку UTF-8.
В этом случае при компиляции проекта, строковые литералы интерпретируются ошибочно компилятором. Кроме того возникнет одна из следующих проблем:
  • Компиляции операция выполнена успешно. В созданном приложении строковые литералы отображаются некорректно. Кроме того может также появиться следующие предупреждающие сообщения при компиляции проекта:
    Предупреждение C4566: символ, представленный имя универсального символа 'xx' невозможно представить в текущей кодовой странице.
  • Сбой компиляции. Кроме того может появиться следующее сообщение об ошибке при компиляции проекта:
    ошибки C2078: слишком много инициализаторов

Причина


Эта проблема возникает, поскольку компилятор предполагает, что файл в разделе «Проблема» имеет кодировку MBCS. По этой причине compilerincorrectly преобразует файл.

Решение


Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему.

Если исправление доступно для скачивания, имеется раздел "Пакет исправлений доступен для скачивания" в верхней части этой статьи базы знаний. Если этого раздела нет, отправьте запрос в службу технической поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Чтобы получить полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание, посетите следующий веб-сайт корпорации Майкрософт:Примечание. В форме "Пакет исправлений доступен для скачивания" отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Предварительные условия

Visual Studio 2008 Пакет обновления 1 (SP1 для установки этого исправления) необходимо иметь.

Необходимость перезагрузки

Необходимо перезагрузить компьютер после установки исправления, если используется не экземпляр Visual Studio.

Сведения о замене исправлений

Это исправление не заменяет других исправлений.

Сведения о файлах

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента Дата и время в панели управления.
Имя файлаВерсия файлаРазмер файлаДатаВремяПлатформа
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

Статус


Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения


Чтобы устранить ошибку в компиляторе, данное исправление и сохраните файл с метка порядка следования байтов. Кроме того добавьте следующую директиву «pragma» перед строковые литералы в исходном файле.

#pragma execution_character_set("utf-8")
Примечание. Директива «прагма» задает единицу перевода для исходного файла, пока директива «прагма» заменяется другая директива «прагма».