Конвертировать символ ucs(универсальный набор символов) в юникод?

Я читаю код от кого-то, я случайно увидел код следующим образом.

Согласно комментарию, эта функция должна Convert a UCS character to an UTF-8 string, Но что такое символ ucs, каково правило для преобразования ucs в unicode, где я могу найти документы?

/*
 * Convert a UCS character to an UTF-8 string
 *
 * Returns the string length of the result
 */
size_t
tUcs2Utf8(ULONG ulChar, char *szResult, size_t tMaxResultLen)
{
    if (szResult == NULL || tMaxResultLen == 0) {
        return 0;
    }

    if (ulChar < 0x80 && tMaxResultLen >= 2) {
        szResult[0] = (char)ulChar;
        szResult[1] = '\0';
        return 1;
    }
    if (ulChar < 0x800 && tMaxResultLen >= 3) {
        szResult[0] = (char)(0xc0 | ulChar >> 6);
        szResult[1] = (char)(0x80 | (ulChar & 0x3f));
        szResult[2] = '\0';
        return 2;
    }
    if (ulChar < 0x10000 && tMaxResultLen >= 4) {
        szResult[0] = (char)(0xe0 | ulChar >> 12);
        szResult[1] = (char)(0x80 | (ulChar >> 6 & 0x3f));
        szResult[2] = (char)(0x80 | (ulChar & 0x3f));
        szResult[3] = '\0';
        return 3;
    }
    if (ulChar < 0x200000 && tMaxResultLen >= 5) {
        szResult[0] = (char)(0xf0 | ulChar >> 18);
        szResult[1] = (char)(0x80 | (ulChar >> 12 & 0x3f));
        szResult[2] = (char)(0x80 | (ulChar >> 6 & 0x3f));
        szResult[3] = (char)(0x80 | (ulChar & 0x3f));
        szResult[4] = '\0';
        return 4;
    }
    szResult[0] = '\0';
    return 0;
} /* end of tUcs2Utf8 */

1 ответ

Универсальный набор символов является стандартом ISO. Он определяет те же символы, что и Unicode, поэтому нет необходимости в преобразовании символов. Каждая версия UCS, по сути, представляет собой небольшое подмножество определенной версии стандарта Unicode. Новые символы сначала добавляются в Юникод, и очень часто UCS синхронизируется с Юникодом. Приложение C стандарта Unicode содержит таблицу, которая показывает взаимосвязь между различными версиями.

Также обратите внимание, что в размещенном вами коде используется нестандартный верхний предел 0x200000. Это должно быть изменено на 0x110000.

Другие вопросы по тегам