Я рад видеть std::u16string
и std::u32string
в С++ 11, но мне интересно, почему нет std::u8string
для обработки дела UTF-8. У меня создается впечатление, что std::string
предназначен для UTF-8, но, похоже, это не очень хорошо. Я имею в виду, не возвращает ли std::string.length()
размер буфера строк, а не количество символов в строке?
Итак, как метод length()
стандартных строк, определенных для новых классов С++ 11? Они возвращают размер строкового буфера, количество кодовых точек или количество символов (если суррогатная пара - 2 кодовых пункта, но один символ. Пожалуйста, поправьте меня, если я ошибаюсь)?
А как насчет size()
; Разве это не равно length()
?
См. http://en.cppreference.com/w/cpp/string/basic_string/length для источника моей путаницы.
Итак, я думаю, мой основной вопрос: как использовать std::string
, std::u16string
и std::u32string
и правильно различать размер буфера, количество кодовых точек и количество символов? Если вы используете стандартные итераторы, выполняете ли вы итерацию по байтам, кодовым точкам или символам?