En Java, j'ai pu déterminer si un caractère particulier était par exemple un Kanji japonais utilisant Unicode.blockOf (Character). J'essaie de faire la même chose pour un QChar, mais je n'ai pas trouvé de fonction pertinente pour le faire. Je me demande si je l'ai manqué, ou devrais-je rouler le mien, et si oui, comment?Comment puis-je déterminer le bloc Unicode d'un caractère, en particulier un QChar Qt?
Répondre
Il y a QChar::Category howver il ne fournit pas tout ce que vous avez besoin, pour vérifier si le caractère est dans certaine gamme, vous pouvez écrire une fonction comme ceci:
bool inRange(QChar c, ushort b, ushort e) {
return (c.unicode() >= b) && (c.unicode() <= e);
}
Vous pouvez alors l'utiliser comme ceci:
inRange(c, 0x3040, 0x309F); // Hiragana?
Bien sûr, vous pouvez aller plus loin et de le rendre plus abstrait et enemurate les gammes:
inRange(c, Range::Hiragana);
et here est la liste des blocs Unicode
Je ne sais pas s'il existe une meilleure approche spécifique de Qt. Si ce n'est pas vous pourriez essayer d'utiliser ICU plutôt que de rouler votre propre solution. ICU possède à la fois une version "C/C++" et une version Java. La version Java d'ICU partage en fait un ancêtre commun avec certaines des bibliothèques standard Java pour i18n/l10n, donc la version C/C++ sera, espérons-le, facile à comprendre.
J'ai des sentiments mitigés sur l'ajout d'une dépendance de bibliothèque supplémentaire à mon application pour quelque chose de si simple. Comme je le vois, il devrait être facile de récupérer une sorte de code de caractère de mon personnage et ensuite de le tester contre une gamme de codes tels que définis dans la norme Unicode - ai-je tort? – neuviemeporte
pourquoi ne pas simplement "retourner c.unicode()> = b && c.unicode() <= e;"? Complexité constante vs linéaire ... –
Oui, ce serait en effet mieux :) Edité. – Palmik