ВИПРАВЛЕННЯ: Рядок літералів є неправильно, компілятор Visual C++ Visual Studio 2008 із пакетом оновлень 1 під час рядок-літералів кодування на UTF-8 а також містять-азійські символи


Причини


Розглянемо таку ситуацію:
  • Створення проекту Visual C++ у Microsoft Visual Studio 2008 з пакетом оновлень 1 (SP1).
  • Файл проекту, є вузьким рядок літералів. Ці літералів в рядку містять-азійські символи а не починаються з буквою "L.."
  • Рядок-літерали, використовувати кодування UTF-8.
У цьому випадку під час компіляції проекту, у рядку літералів є неправильно, компілятор. Крім того, у разі виникнення таких проблем:
  • Компіляція операцію завершено. Проте в рядку літералів відображаються неправильно згенерований програми. Крім того, також з'являється попередження про такі повідомлення при компіляції проекту:
    попередження C4566: символів, представлені універсальний символ ім'я "xx" не може бути представлений поточної кодової сторінки.
  • Не вдається виконати операцію компіляції. Крім того, може з'явитися таке повідомлення про помилку під час компіляції проекту:
    Помилка C2078: забагато типи

Причина


Ця проблема виникає, тому що компілятор припускається, що файл в розділі "Ознаки", має кодування MBCS кодування.. Унаслідок використання такого способу у compilerincorrectly переводиться на файл.

Вирішення


Відомості про виправлень

Виправлення доступне від корпорації Майкрософт. Проте, це виправлення призначене тільки для вирішення проблеми, описаної в цій статті. Застосовуйте це виправлення лише до систем, які зазнають цієї конкретної проблеми.

Якщо Виправлення доступне для завантаження, є розділ "Виправлення доступне для завантаження" на початку цієї статті бази знань. Якщо цей розділ не відображається, надішліть запит до клієнтської служби та підтримки Microsoft, щоб отримати виправлення.

Примітка. Якщо виникають додаткові проблеми, або потрібно виявлення проблем, можливо, доведеться створити окремий запит на обслуговування. Звичайні кошти на технічну підтримку будуть застосовуватися для додаткових питань і проблем, які не пов'язані з цим виправленням. Повний список телефонів служби підтримки користувачів і технічної підтримки, або створити окремий запит на обслуговування відвідайте веб-сайт корпорації Майкрософт:Примітка. У формі "Виправлення доступне для завантаження" відображається список мов, для яких це виправлення доступне. Якщо потрібна мова не відображається, то виправлення недоступне для даної мови.

Попередні вимоги

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

Необхідність перезавантаження

Вам не потрібно перезавантажити комп'ютер, після застосування цього виправлення, якщо використовується не екземпляр Visual Studio.

Відомості про заміну виправлень

Це виправлення не замінює інших виправлень.

Відомості про файли

Англійська версія цього виправлення на комп'ютері має атрибути файлів (або новіші атрибути файлів), подані в нижченаведеній таблиці. Значення дати й часу для цих файлів наведено за всесвітнім координованим часом (UTC). Переглядаючи відомості про файл, час конвертується у місцевий час. Щоб визначити різницю між 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")
Примітка. "Pragma" Директива встановлює пристрій варіант перекладу вихідного файлу, доки не замінюється інший "pragma"-директиви директиви "pragma".