Компилятор Microsoft предполагает локальную кодировку ANSI для файлов без спецификации, которая, вероятно, является Windows-1252 в вашем случае. Если вы запустите cl /?
из командной строки, вы увидите следующие параметры командной строки:
...
/source-charset:<iana-name>|.nnnn set source character set
/execution-charset:<iana-name>|.nnnn set execution character set
/utf-8 set source and execution character set to UTF-8
...
Используйте /source-charset:UTF-8
или /utf-8
, если вы не хотите сохранять с помощью спецификации.
Код теста, сохраненный в UTF-8 без спецификации:
#include <stdio.h>
#include <string.h>
int main()
{
const char *const utf8 = u8"Ā";
printf("%zu\n",strlen(utf8));
}
Выход:
C:\>cl /nologo test.cpp
test.cpp
C:\>test
5
C:\>cl /nologo /utf-8 test.cpp
test.cpp
C:\>test
2