Ces derniers temps j'ai pas mal travaillé sur la dkstd. J'ai enfin décidé d'inclure une classe C++ pour gérer les chaines Unicode.
Malheureusement, si gérer un chaine traditionnelle (avec un octet par caractère) est assez simple et direct, la gestion d'une chaine Unicode est beaucoup plus délicate. L'Unicode ne définit qu'une chose : un nombre correspond à un caractère. Mais comment stocker ces nombres ? On compte plusieurs encodages :
La décision a été difficile à prendre. J'ai finallement opté pour l'UCS-2, avec une possibilité de créer un jour si on le souhaite une 3e classe de gestion de chaine utilisant l'UCS-4. J'incluerai des fonctions de conversions pour les autres formes d'encodage, notamment l'UTF-8 qui est répandu pour écrire des fichiers XML.
Qu'est-ce qui m'a aidé à prendre cette décision ? Je fais pas mal de logiciels sous Windows, et c'est l'UCS-2 qui est le format utilisé pour les fonctions traitant l'Unicode. C'est aussi il me semble le format utilisé par Java. Bref, j'ai opté pour la solution susceptible de m'offrir la meilleure interopérabitilité avec les systèmes existants. Encore maintenant j'espère avoir pris la bonne décision, on verra à l'usage, c'est dans des cas pratiques qu'on met à l'épreuve un design logiciel.
Par ailleurs, je vous recommande la lecture d'un très bon article sur l'Unicode de Joel On Software.