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 могут кодировать один символ.