105 votes

Traitement de l'Unicode en C++

Quelle est la meilleure pratique pour le traitement Unicode en C++ ?

81voto

hazzen Points 7315
  • Utilisez UNITÉ DE SOINS INTENSIFS pour le traitement de vos données (ou une bibliothèque similaire)
  • Dans votre propre magasin de données, assurez-vous que tout est stocké dans le même encodage.
  • Veillez à toujours utiliser votre bibliothèque unicode pour des tâches banales telles que la longueur des chaînes de caractères, l'état des majuscules, etc. N'utilisez jamais les modules intégrés de la bibliothèque standard comme is_alpha sauf si c'est la définition que vous voulez.
  • Je ne peux pas le dire assez : n'itèrent jamais sur les indices d'un string si vous vous souciez de l'exactitude, utilisez toujours votre bibliothèque unicode pour cela.

10voto

eestrada Points 136

Si vous ne vous souciez pas de la rétrocompatibilité avec les normes C++ précédentes, la norme C++11 actuelle intègre le support Unicode : http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf

La meilleure pratique pour le traitement de l'Unicode en C++ serait donc d'utiliser les fonctions intégrées. Ce n'est cependant pas toujours possible avec les bases de code plus anciennes, la norme étant si récente à l'heure actuelle.

EDIT : Pour clarifier, C++11 est conscient de l'Unicode en ce sens qu'il supporte maintenant les littéraux et les chaînes Unicode. Cependant, la bibliothèque standard n'a que soutien limité pour le traitement et la conversion Unicode. Pour vos besoins actuels, cela peut être suffisant. Cependant, si vous avez besoin de faire beaucoup d'efforts dès maintenant, vous devrez peut-être utiliser quelque chose comme UNITÉ DE SOINS INTENSIFS pour un traitement plus approfondi. Il existe quelques propositions actuellement en cours de réalisation pour inclure un support plus robuste pour la conversion de texte entre différents encodages. Je pense (et j'espère) que cela fera partie de la prochaine version de la norme rapport technique .

9voto

jschroedl Points 1932

Notre entreprise (et d'autres) utilise le logiciel libre Composants internationaux pour Unicode (ICU) développée à l'origine par Taligent.

Il gère les chaînes de caractères, les locales, les conversions, les dates et heures, la collation, les transformations, etc.

Commencez par le Guide de l'utilisateur ICU

5voto

Adam Pierce Points 12801

Voici une liste de contrôle pour la programmation de Windows :

  • Toutes les chaînes de caractères entourées de _T("ma chaîne")
  • Fonctions strlen() etc. remplacées par _tcslen() etc.
  • Utilisez LPTSTR et LPCTSTR au lieu de char * et const char *.
  • Lorsque vous démarrez de nouveaux projets dans Dev Studio, assurez-vous religieusement que l'option Unicode est sélectionnée dans les propriétés de votre projet.
  • Pour les chaînes de caractères C++, utilisez std::wstring au lieu de std::string.

3voto

ine Points 10065

Regardez http://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-c

Cette question contient un lien vers la documentation de Microsoft sur Unicode : http://msdn.microsoft.com/en-us/library/cc194799.aspx

Si vous regardez dans la partie gauche de la navigation sur MSDN à côté de cet article, vous devriez trouver de nombreuses informations relatives aux fonctions Unicode. Il fait partie d'un chapitre intitulé "Encodage des caractères" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )

Elle comporte les sous-sections suivantes :

  • Le modèle Code-Page
  • Jeux de caractères à deux octets dans Windows
  • Unicode
  • Questions de compatibilité dans les environnements mixtes
  • Conversion des données Unicode
  • Migration des programmes basés sur Windows vers Unicode
  • Resumen

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X