Как я могу определить длину (количество символов) в std::wstring
?
С помощью myStr.length()
дает размер байта (я думаю), но это не количество символов. Нужно ли создавать свою собственную функцию, чтобы найти количество символов или есть ли собственный способ C ++ или собственный способ WinAPI?
std::wstring::length()
даст вам количество символов, где персонаж определяется как атомная единица wstring
объект, то есть wchar
, Вот что означает Стандарт, когда он относится к characters
(увидеть эта почта для более подробной информации об использовании этого слова в Стандарте).
Тем не менее, когда дело доходит до символов Unicode, будь то один wchar
соответствует одному символу Unicode, зависит от кодировки, используемой внутри wstring
, Если используется UTF-16, что часто (но не обязательно), один wchar
будет соответствовать одному символу Unicode только для базовой многоязычной плоскости (то есть все наборы символов, полученные из ISO-8859, а также большинство обычно используемых символов CJK, но не некоторые из более экзотических (например, классических китайских) символов)(*). Если вы хотите получить правильное количество символов для все Символы Unicode в этом случае вам необходимо использовать библиотеку, поддерживающую Unicode (например, ICU), или кодировать ее самостоятельно.
(*)Есть дополнительные проблемы, если комбинирование персонажей используются, как правильно указывает @ 一 correctly. Считать их правильно также лучше всего, используя соответствующие библиотеки.
Если вы хотите узнать длину в wchar_t
лица, использующие myStr.length()
, Если вы хотите узнать размер в кодовых точках Unicode, вам нужно найти библиотеку, которая знает, как их подсчитать. Вы также можете написать один самостоятельно — правила определения того, использует ли кодовая точка, закодированная как UTF-16 один или два объекта, не слишком сложны, см. http://en.wikipedia.org/wiki/Utf-16. Чтобы узнать, если ваш wchar_t
используется 16 бит (против 32 бит) sizeof(wchar_t) == 2
,