J'ai essayé de chercher stackoverflow pour trouver une réponse à cela, mais les questions et réponses que j'ai trouvées datent d'environ 10 ans et je n'arrive pas à trouver un consensus sur le sujet en raison des changements et des progrès possibles.
Il y a plusieurs bibliothèques que je connais en dehors de la stl qui sont censées gérer unicode-
Il y a quelques fonctionnalités de la stl ( wstring , codecvt_utf8 ) qui ont été incluses mais les gens semblent être ambivalents à propos de leur utilisation car ils traitent avec UTF-16 que ce site: ( tf-8 partout ) dit que ne devrait pas être utilisé et beaucoup de gens en ligne semblent d'accord avec la prémisse.
La seule chose que je recherche, c'est la possibilité de faire 4 choses avec une chaîne unicode-
D'après ce que je peux dire, icu gère cela et plus encore. Ce que j'aimerais savoir, c'est s'il existe un moyen standard de gérer cela sous Linux, Windows et MacOS.
Merci pour votre temps.
Je vais essayer de jeter quelques idées ici:
dès que vous sortez du plan multilingue de base (points de code 16 bits), les choses deviennent de plus en plus complexes. Le emoji est particulièrement horrible à traiter: un emoji peut être suivi d'un sélecteur de variation (U + FE0E VARIATION SELECTOR-15 (VS15) pour le texte ou U + FE0F VARIATION SELECTOR-16 (VS16) pour le style emoji) pour modifier son style d'affichage, plus ou moins l'ancien i bs ^
qui a été utilisé en 1970 ascii quand on voulait imprimer î
. Ce n'est pas tout, les caractères U + 1F3FB à U + 1F3FF sont utilisés pour fournir une couleur de peau à 102 emoji humains répartis sur six blocs: Symboles, Émoticônes, Symboles divers, Symboles et pictogrammes divers, Symboles et pictogrammes supplémentaires, et Transport et carte Symboles.
Cela signifie simplement que jusqu'à 3 points de code Unicode consécutifs peuvent représenter un seul glyphe ... Donc, l'idée qu'un caractère est un char32_t
est toujours une approximation
Ma conclusion est que Unicode est une chose complexe, et nécessite vraiment une bibliothèque dédiée comme ICU. Vous pouvez essayer d'utiliser des outils simples comme les convertisseurs de la bibliothèque standard lorsque vous ne traitez qu'avec le BMP, mais la prise en charge complète va bien au-delà.
BTW: même d'autres langages comme Python qui prétendent avoir un support natif unicode (qui est bien mieux à mon humble avis que le C++ actuel) échouent sur une partie:
Donc, le support pour Unicode est médiocre depuis plus de 10 ans, et je n'espère pas vraiment que les choses iront beaucoup mieux dans les 10 prochaines années ...