visual studio c++ /utf-8 странное поведение std::string

Я включил параметр /utf-8 в visual studio, сохранил файл в UTF-8(with BOM) и написал следующий код:

#include <iostream>
int main(int argc, char* argv[]) noexcept
{
    std::cout << std::string("привет мир!").size();
}

Как результат я получил число 20. Я понимаю почему это произошло, но как это исправить?


Ответы (1 шт):

Автор решения: HolyBlackCat

как это исправить?

Никак не пофиксить. Искать библиотеку для работы с юникодом.

Еще можно посчитать длину руками - посчитать количество байт, для которых выполняется (byte & 0b11000000) != 0b10000000. Если в строке валидный UTF-8, то получится число code points в строке. Это обычно равно числу символов, но в каких-то хитрых случаях несколько code points могут кодировать один символ.

→ Ссылка