¿Los caracteres UTF16 (como los utilizados, por ejemplo, las funciones de ancho-winapi) siempre tienen 2 bytes de longitud?

Por favor aclaren para mí, ¿cómo funciona UTF16? Estoy un poco confundido, considerando estos puntos:

Hay un tipo estático en C ++, WCHAR, que tiene una longitud de 2 bytes. (siempre 2 bytes de largo obviamente)La mayor parte de msdn y alguna otra documentación parecen tener los supuestos de que los caracteres siempre tienen 2 bytes de longitud. Esto puede ser solo mi imaginación, no puedo encontrar ningún ejemplo en particular, pero parece que es así.No hay funciones "extra anchas" o tipos de caracteres ampliamente utilizados en C ++ o Windows, por lo que supongo que UTF16 es todo lo que se necesita.Que yo sepa, el Unicode tiene muchos más caracteres que 65535, por lo que obviamente no tienen suficiente espacio en 2 bytes.UTF16 parece ser una versión más grande de UTF8, y los caracteres UTF8 pueden tener diferentes longitudes.

Entonces, si un carácter UTF16 no siempre tiene 2 bytes de longitud, ¿cuánto más podría ser? 3 bytes? o solo múltiplos de 2? Y luego, por ejemplo, si hay una función winapi que quiere saber el tamaño de una cadena ancha en caracteres, y la cadena contiene 2 caracteres que tienen cada uno 4 bytes de longitud, ¿cómo es el tamaño de esa cadena?en personajes ¿calculado?

¿Tiene 2 caracteres de largo o 4 caracteres de largo? (ya que tiene 8 bytes de longitud y cada WCHAR tiene 2 bytes)

ACTUALIZACIÓN: Ahora veo que el conteo de caracteres no es necesariamente una cosa estándar o una cosa de c ++, así que intentaré ser un poco más específico en mi segunda pregunta, sobre la longitud en "caracteres" de una cadena ancha:

En Windows, específicamente, en Winapi, en sus funciones amplias (que terminan con W), ¿cómo se cuenta el número de caracteres en una cadena que consta de 2 puntos de código unicode, cada uno de los cuales consta de 2 unidades de código (un total de 8 bytes)? ¿Es una cadena de 2 caracteres de longitud (igual que el número de puntos de código) o 4 caracteres de longitud (igual que el número total de unidades de código?)

O, siendo más genérico: ¿qué significa la definición de Windows de "número de caracteres en una cadena ancha", número de puntos de código o número de unidades de código?

Respuestas a la pregunta(8)

Su respuesta a la pregunta