И что ты делаешь со строками? Если просто сохранить и отобразить, то это почти никогда не будет проблемой, если только вы не попытаетесь определить видимую длину строки по количеству символов (что также является плохой идеей по другим причинам). Однако в целях разбора ... В зависимости от характера разбора он может превратиться в банку с червями.

ите, пожалуйста, как работает UTF16? Я немного растерялся, учитывая эти моменты:

В C ++ есть статический тип WCHAR длиной 2 байта. (всегда 2 байта длиной obvisouly)Большая часть msdn и некоторой другой документации, похоже, предполагают, что символы всегда имеют длину 2 байта. Это может быть только мое воображение, я не могу привести какие-то конкретные примеры, но это только кажется.В C ++ или окнах нет «сверхширокых» типов функций или символов, поэтому я предполагаю, что UTF16 - это все, что когда-либо необходимо.Насколько мне известно, Unicode содержит намного больше символов, чем 65535, поэтому им не хватает места в 2 байта.UTF16, кажется, является большей версией UTF8, а символы UTF8 могут быть разной длины.

Так что, если символ UTF16 не всегда имеет длину 2 байта, как долго это еще может быть? 3 байта? или только кратные 2? И затем, например, если есть функция winapi, которая хочет знать размер широкой строки в символах, и строка содержит 2 символа, каждый из которых имеет длину 4 байта, то каков размер этой строкив символах рассчитывается?

Это 2 символа или 4 символа? (поскольку он имеет длину 8 байтов, а каждый WCHAR - 2 байта)

ОБНОВЛЕНИЕ: Теперь я вижу, что подсчет символов не обязательно даже стандарт или C ++, поэтому я попытаюсь быть более конкретным во втором вопросе о длине в «символах» широкой строки:

В Windows, в частности в Winapi, в их широких функциях (оканчивающихся на W), как считать число символов в строке, состоящей из 2 кодовых точек Юникода, каждая из которых состоит из 2 кодовых блоков (всего 8 байтов)? Длина такой строки составляет 2 символа (соответствует количеству кодовых точек) или 4 символа (соответствует общему количеству кодовых единиц?)

Или, говоря более обобщенно: что означает определение «количества символов в широкой строке» в Windows, количество кодовых точек или количество кодовых единиц?

Ответы на вопрос(8)

Ваш ответ на вопрос