Quelle est la meilleure pratique pour le traitement Unicode en C++ ?
Réponses
Trop de publicités?- 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.
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 .
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
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.
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