В C ++ существует статический тип WCHAR, длина которого составляет 2 байта. (всегда 2 байта по длине)
Ну, WCHAR - это вещь MS, а не C ++.
Но для широкого символа есть wchar_t. Хотя это не всегда 2. В системе Linux это обычно 4 байта.
Большинство msdn и некоторой другой документации, похоже, предполагают, что длина символов всегда составляет 2 байта. Это может быть только мое воображение, я не могу привести какие-то конкретные примеры, но это только кажется.
Есть ли они. Я могу в это поверить.
В C ++ или окнах нет "очень широких" функций или типов символов, поэтому я бы предположил, что UTF16 - это все, что когда-либо было необходимо.
C / C ++ не делает никаких предположений относительно кодировки символов. Хотя ОС может. Например, Windows использует UTF-16 в качестве интерфейса, в то время как многие Linus используют UTF-32. Но вы должны прочитать документацию для каждого интерфейса, чтобы знать это явно.
Насколько мне известно, в юникоде гораздо больше символов, чем в 65535, поэтому им не хватает места в 2 байта.
2 байта - все, что вам нужно для чисел 0 -> 65535
Но UCS (кодировка, на которой основана UTF) имеет 20 битов на кодовую точку. Таким образом, некоторые кодовые точки в UTF-16 кодируются как 2 16-байтовых символа (они называются суррогатными парами).
UTF16 представляется более крупной версией UTF8, а символы UTF8 могут иметь различную длину.
UTF-8 / UTF-16 и UTF-32 кодируют один и тот же набор кодовых точек (которые составляют 20 байтов на кодовую точку). UTF-32 - единственный, который имеет фиксированный размер (UTF-16 должен был быть фиксированного размера, но затем они нашли много других символов (например, Klingon), которые нам нужно было закодировать, и у нас закончилось пространство в плоскости 0. Итак мы добавили еще 32 равнины (отсюда и четыре дополнительных бита).
Так что, если символ UTF16 не всегда имеет длину 2 байта, как долго он еще может быть? 3 байта? или только кратные 2?
Это либо 1 16-битный символ, либо 2 16-битные символы.
И затем, например, если есть функция winapi, которая хочет знать размер широкой строки в символах, и строка содержит 2 символа, каждый из которых имеет длину 4 байта, как рассчитывается размер этой строки в символах?
Вы должны идти вперед и вычислять каждого персонажа по одному.
Это 2 символа или 4 символа? (поскольку он имеет длину 8 байт, а каждый WCHAR - 2 байта)
Все системы в вашей системе