как конвертировать ucs4 в ucs2, используя C ++ и ucs2 в ucs4? - PullRequest
1 голос
/ 30 мая 2011

Есть ли какой-нибудь метод C ++, поддерживающий это преобразование? Сейчас я просто заполняю символ '0', чтобы преобразовать ucs2 в ucs4, это безопасно? спасибо!

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Это верно для UCS2, но, скорее всего, это не то, что у вас есть. В настоящее время вы чаще сталкиваетесь с UTF-16. В отличие от UCS-2, UTF-16 кодирует символы Unicode как одну или две 16-битные единицы. Это необходимо, поскольку в текущей версии Unicode содержится более 65536 символов.

Более сложные преобразования обычно могут выполняться вашей ОС, и есть несколько (нестандартных) библиотек, которые предлагают одинаковую функциональность, например, ICU.

0 голосов
/ 17 октября 2017

У меня есть что-то подобное.Надеюсь, это поможет:

String^ StringFromUCS4(const char32_t* element, int length)
{
    StringBuilder^ result = gcnew StringBuilder(length);
    const char32_t* pUCS4 = element;

    int characterCount = 0;
    while (*pUCS4 != 0)
    {
        wchar_t cUTF16;
        if (*pUCS4 < 0x10000)
        {
            cUTF16 = (wchar_t)*pUCS4;
        }
        else 
        {
            unsigned int t = *pUCS4 - 0x10000;
            unsigned int h = (((t << 12) >> 22) + 0xD800);
            unsigned int l = (((t << 22) >> 22) + 0xDC00);
            cUTF16 = (wchar_t)((h << 16) | (l & 0x0000FFFF));
        }

        result->Append((wchar_t)*pUCS4);

        characterCount++;
        if (characterCount >= length)
        {
            break;
        }

        pUCS4++;
    }

    return result->ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...