Доступ к кодовым точкам wchar_t *

У меня есть функция, которая получает wchar_t* в качестве ввода. Теперь в этой функции мне приходится обрабатывать кодовые точки.

Поскольку эта программа должна работать на нескольких платформах, я очень мало знаю о кодировании в wchar_t*,

Я пытался получить преобразование из wchar_t* в char32_t* с помощью std::codecvt<char32_t, wchar_t, std::mbstate_t>, К сожалению, эта специализация, кажется, не существует.

Тогда я подумал, что, возможно, смогу просто использовать wchar_t* в качестве входного буфера только для чтения icu::UnicodeString, но, кажется, я сначала должен преобразовать в UChar* с помощью u_strFromWCS, Но опять же мне сначала нужно выделить UChar буфер, с правильным количеством кодовых блоков в UChar,

Может кто-нибудь сказать мне, какой самый эффективный способ доступа к кодовым точкам в wchar_t* является?

Пример:

Если я не ошибаюсь, следующий пример должен использовать две кодовые единицы на кодовую точку.

const wchar_t *test = L"A �� 剝Ц B";

0

Решение

Стандарт очень мало говорит о кодировке или о чем-либо wchar_t поэтому у вас не может быть решения без каких-либо предположений.

Разумное предположение, что если sizeof(wchar_t) == 2 (в Windows) это UTF-16, а если sizeof(wchar_t) == 4это UTF-32 (в Unix), поэтому вы можете использовать макросы или шаблоны для выбора во время компиляции, какой из них выбрать. Если это возможно для чего-то в wchar_t чтобы быть закодированным в какой-то устаревшей кодировке, поскольку нет общего способа автоматически определять кодировку, вы должны получить информацию о кодировке в другом месте.

1

Другие решения

Упрощенно, wchar_t содержит символ Unicode. В моем коде я часто получаю доступ к каждому символу кода по индексам (если я не правильно понял ваш вопрос).

wchar_t* unicodeString = L"this is a unicode string";

unicodeString [0] является одним символом

-1