Пожалуйста, поясните мне, как работает UTF16? Я немного сбит с толку, учитывая следующие моменты:
Итак, если символ UTF16 не всегда имеет длину 2 байта, как долго еще это могло быть? 3 байта? или только кратные 2? А затем, например, если есть функция winapi, которая хочет знать размер широкой строки в символах, и строка содержит 2 символа, каждый из которых имеет длину 4 байта, каков размер этой строки в символах рассчитано?
Это 2 символа или 4 символа? (поскольку он имеет длину 8 байтов, а каждый WCHAR - 2 байта)
ОБНОВЛЕНИЕ: теперь я вижу, что подсчет символов не обязательно является стандартным или даже частью C ++, поэтому я постараюсь быть немного больше конкретно в моем втором вопросе о длине «символов» широкой строки:
В Windows, в частности, в Winapi, в их широких функциях (заканчивающихся на W), как подсчитать количество символов в строке который состоит из 2 кодовых точек Unicode, каждый состоит из 2 кодовых единиц (всего 8 байтов)? Является ли такая строка длиной 2 символа (такой же, как количество кодовых точек) или длиной 4 символа (такой же, как общее количество кодовых единиц?)
Или, говоря более общим образом: что Windows определяет «количество символов в широкая строка "означает, количество кодовых точек или количество кодовых единиц?