#c #unicode
#c #юникод
Вопрос:
char32_t c = U'▁'
работает под GCC и Clang, но не работает под MSVC с ошибкой
error C2015: too many characters in constant
U'u2581'
работает, но является ли это ошибкой компилятора? Документация Microsoft по строковым и символьным литералам, похоже, ничего не говорит о том, что она не поддерживается, но, возможно, я пропустил что-то важное.
Комментарии:
1. Это может иметь какое-то отношение к исходному набору символов, с которым обрабатывается файл CPP. В какой кодировке символов сохранен исходный файл?
2. @1201ProgramAlarm UTF-8.
3. Если я скомпилирую эту строку в файл, сохраненный как «UTF-8», он скомпилируется нормально. Если я использую «UTF-8-no-bom» (как его называет мой редактор; в начале файла нет маркировки порядка байтов), я получаю эту ошибку.
4. @1201ProgramAlarm Ах, и 1) VS Code идет другим путем; «UTF-8» и «UTF-8 со спецификацией»; 2) согласно en.wikipedia.org/wiki/Byte_order_mark#UTF-8 , «Компиляторы и интерпретаторы Microsoft, а также многие части программного обеспечения в Microsoft Windows, такие как Notepad, рассматривают спецификацию как обязательное магическое число, а нечем использовать эвристику «. хотя это и не рекомендуется. Похоже, это ответ; спасибо!
5. MSVC нуждается
/utf-8
в переключении компилятора, если исходный файл не имеет спецификации, в противном случае предполагается локализованная кодировка ANSI, напримерWindows-1252
, в американских и западноевропейских версиях Windows.