ConvertUTF16toUCS4 в Apache Xerces

Исходный код для Apache Xerces: ConvertUTF16toUCS4:

ConversionResult ConvertUTF16toUCS4(
    UTF16 **sourceStart, UTF16 *sourceEnd,
    UCS4 **targetStart, const UCS4 *targetEnd)
{
    ConversionResult result = ok;
    register UTF16 *source = *sourceStart;
    register UCS4 *target = *targetStart;
    while (source < sourceEnd)
    {
        register UCS4 ch;
        ch = *source++;
        if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd && source < sourceEnd)
        {
            register UCS4 ch2 = *source;
            if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd)
            {
                ch = ((ch - kSurrogateHighStart) << halfShift) + (ch2 - kSurrogateLowStart) + halfBase;
                ++source;
            };
        };
        if (target >= targetEnd)
        {
            result = targetExhausted;
            break;
        };
        *target++ = ch;
    };
    *sourceStart = source;
    *targetStart = target;
    return result;
};

Я пытаюсь преобразовать суррогатные пары в кодировке UTF16 в данные в кодировке UCS4. Я использую WindowsOS и немного порядковый номер.

Если вы посмотрите внимательно, то увидите, что после конвертации они назначают *targetStart, Так не будет ли он указывать на последний элемент цели вместо первого элемента цели? Когда я удаляю заявление *targetStart = target; из моего кода, он работает, как ожидалось. Это ошибка в API или я что-то упустил?

0 ответов

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