Tous les exemples de la FAQ (ou presque) ainsi que tous les tutoriaux utilisent des char et des std::string.
Pareil pour les iostream. Par défaut c'est fait pour gérer du texte, à condition qu'il soit en en "char" (on va dire "codé sur 8 bits").
J'essaie de porter mes programmes en unicode afin de laisser tomber définitivement (?) les char et string au profit des wchar_t et wstring. Je pensais la tâche relativement simple puisque les os (enfin, Windows) fonctionnent en unicode en interne. Pareil pour les langages comme Java, C#, l'interface COM, etc.
Je suis donc en train de changer les char en _TCHAR, les "..." en _T("..."), les string en _tstring (j'en ai fait un #define), les strxxx en _tcsxxx, etc, afin de pouvoir compiler à ma guise en _MBCS ou en _UNICODE.
Il s'avère que le C++ ne propose pas grand chose pour nous y aider... Pire, il nous met des batons dans les roues.
Ainsi par exemple pour ouvrir un fichier en utilisant wifstream() le nom de fichier passé en paramètre doit être une chaîne en... char et non pas wchar_t (aberrant je trouve).
Autre exemple, les exceptions sont en char, pas en wchar_t (le fameux what() retourne un const char *).
"Officiellement", la norme C++ dit que wchar_t est au moins aussi grand que char, rien de plus. wchart_t n'est donc pas nécessairement un caractère sur 16 bits (même si en pratique je crois qu'il y a un consensus pour que se soit quand même le cas sur toute les plateformes, sauf peut-être sur les mac ?).
Bref, comment faire afin d'éviter la moindre conversion interne WideCharToMultiByte et vice versa ?
Merci pour vos expériences.
Partager