Quelle est la meilleure pratique du traitement Unicode en C ++?
Quelle est la meilleure pratique du traitement Unicode en C ++?
Réponses:
is_alpha
moins que ce soit la définition que vous voulez.string
si vous vous souciez de l'exactitude, utilisez toujours votre bibliothèque Unicode pour cela.Si vous ne vous souciez pas de la compatibilité ascendante avec les normes C ++ précédentes, la norme C ++ 11 actuelle a intégré la prise en charge Unicode: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
La meilleure pratique pour le traitement Unicode en C ++ serait donc d'utiliser les fonctionnalités intégrées pour cela. Ce n'est pas toujours une possibilité avec des bases de code plus anciennes, la norme étant si nouvelle à l'heure actuelle.
EDIT: Pour clarifier, C ++ 11 est compatible Unicode en ce qu'il prend désormais en charge les littéraux Unicode et les chaînes Unicode. Cependant, la bibliothèque standard n'a qu'une prise en charge limitée du traitement et de la conversion Unicode. Pour vos besoins actuels, cela peut suffire. Cependant, si vous devez effectuer une grande quantité de travaux lourds en ce moment, vous devrez peut-être encore utiliser quelque chose comme ICU pour un traitement plus approfondi. Certaines propositions sont actuellement en cours pour inclure un support plus robuste pour la conversion de texte entre différents encodages. Je suppose (et j'espère) que cela fera partie du prochain rapport technique .
Notre société (et d'autres) utilisent la bibliothèque open source Internation Components for Unicode (ICU) développée à l'origine par Taligent.
Il gère les chaînes, les paramètres régionaux, les conversions, les dates / heures, le classement, les transformations, etc. Al.
Commencez avec le guide d'utilisation ICU
Voici une liste de contrôle pour la programmation Windows:
Regardez la comparaison de chaînes insensible à la casse en C ++
Cette question a un lien vers la documentation Microsoft sur Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Si vous regardez sur le côté gauche de la navigation sur MSDN à côté de cet article, vous devriez trouver beaucoup d'informations relatives aux fonctions Unicode. Il fait partie d'un chapitre sur "Encoding Characters" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Il comprend les sous-sections suivantes:
Bien que ce ne soit pas la meilleure pratique pour tout le monde, vous pouvez écrire vos propres routines UNICODE C ++ si vous le souhaitez!
Je viens de finir de le faire pendant un week-end. J'ai beaucoup appris, même si je ne garantis pas que ce soit 100% sans bogue, j'ai fait beaucoup de tests et cela semble fonctionner correctement.
Mon code est sous la nouvelle licence BSD et peut être trouvé ici:
http://code.google.com/p/netwidecc/downloads/list
Il s'appelle WSUCONV et est livré avec un exemple de programme main () qui convertit entre UTF-8, UTF-16 et ASCII standard. Si vous jetez le code principal, vous avez une belle bibliothèque pour lire / écrire UNICODE.
Comme cela a été dit ci-dessus, une bibliothèque est le meilleur choix lors de l'utilisation d'un grand système. Cependant, parfois, vous voulez gérer les choses vous-même (peut-être parce que la bibliothèque utiliserait de nombreuses ressources comme sur un micro-contrôleur). Dans ce cas, vous voulez une bibliothèque simple dans laquelle vous pouvez copier les parties pour les choses dont vous avez réellement besoin.
Le code d'exemple de Willow Schlanger semble être un bon (voir sa réponse pour plus de détails).
J'en ai également trouvé un autre qui a un code plus petit, mais qui manque de vérification complète des erreurs et ne gère que UTF-8, mais il était plus simple de retirer des parties.
Voici une liste des bibliothèques intégrées qui semblent décentes.
Utiliser les composants internationaux d'IBM pour Unicode
Jetez un œil aux recommandations de l' UTF-8 Everywhere
string
comme des données binaires.