Как я могу определить блок Unicode символа, в частности Qt QChar?

В Java я смог определить, является ли конкретный символ, например, японским кандзи, с помощью Unicode.blockOf(Character). Я пытаюсь сделать то же самое для QChar, но не могу найти соответствующую функцию для этого. Мне интересно, если я просто пропустил это, или я должен буду катиться самостоятельно, и если так - как?

2 ответа

Решение

Существует QChar::Category, но она не предоставляет все, что вам нужно.

Для проверки того, находится ли символ в определенном диапазоне, вы можете написать такую ​​функцию:

bool inRange(QChar c, ushort b, ushort e) {
    return (c.unicode() >= b) && (c.unicode() <= e);
}

Затем вы можете использовать это так:

inRange(c, 0x3040, 0x309F); // Hiragana?

Конечно, вы можете пойти дальше, сделать его более абстрактным и перечислить диапазоны:

inRange(c, Range::Hiragana);

А вот и список блоков Unicode

Я не знаю, есть ли лучший подход к Qt. Если нет, вы можете попробовать использовать ICU, а не использовать собственное решение.

ICU имеет как версию "C/C++", так и версию Java. Java-версия ICU на самом деле имеет общего предка с некоторыми стандартными библиотеками Java для i18n/l10n, поэтому, надеюсь, вам будет легко выяснить версию C / C++.

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