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

Застосовується до: Visual Studio 2010

Microsoft Visual Studio 2008 версію цієї статті див. 980263 .

Ознаки


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

Причина


Ця проблема виникає в тому, що компілятор припускається, що на літерал, у файлі може інтерпретувати як інтерес байтів кодування MBCS кодування, замість того, як однобайтними наборами Юнікод. Через цю проблему компілятор неправильно переводить файл.

Спосіб вирішення


Щоб вирішити цю проблему, застосування цього виправлення, комп'ютер, на якому компіляції проект. Після цього, збережіть файл із байт замовлення знак а потім додайте наступну директиву "pragma" рядок-літералів перед, у вихідний файл:
#pragma execution_character_set("utf-8")
Примітка. Це "pragma"-Директива встановлює пристрій варіант перекладу вихідного файлу, до того, як ця Директива, "pragma" замінюється іншим "pragma"-директиви.

Щоб отримати додаткові відомості про виправлення

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

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

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

Потрібно мати Microsoft Visual Studio 2010 для застосування цього виправлення.

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

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

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

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

Стан


Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".