Как я могу определить блок 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++.