#c #unicode #character-encoding
#c #unicode #кодировка символов
Вопрос:
Есть ли какой-либо метод C , поддерживающий это преобразование? На данный момент я просто заполняю символ ‘0’, чтобы преобразовать ucs2 в ucs4, это безопасно? Спасибо!
Ответ №1:
Это правильно для UCS2, но, скорее всего, это не то, что у вас есть. В настоящее время вы чаще сталкиваетесь с UTF-16. В отличие от UCS-2, UTF-16 кодирует символы Unicode в виде одной или двух 16-битных единиц. Это необходимо, потому что в текущей версии Unicode содержится более 65536 символов.
Более сложные преобразования обычно могут быть выполнены вашей операционной системой, и существует несколько (нестандартных) библиотек, которые предлагают ту же функциональность, например ICU.
Ответ №2:
У меня есть что-то подобное. Надеюсь, это поможет:
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 amp; 0x0000FFFF));
}
result->Append((wchar_t)*pUCS4);
characterCount ;
if (characterCount >= length)
{
break;
}
pUCS4 ;
}
return result->ToString();
}