Dans un projet, toutes les chaînes internes sont conservées au format utf-8. Le projet est porté sur Linux et Windows. Il y a un besoin pour une fonctionnalité to_lower maintenant.Facette de type C++ pour UTF-8 dans la combinaison
Sur POSIX OS, je pourrais utiliser std :: ctype_byname ("ru_RU.UTF-8"). Mais avec g ++ (Debian 4.3.4-1), ctype :: tolower() ne reconnaît pas les caractères russes UTF-8 (le texte latin est en minuscule). Sous Windows, la bibliothèque standard de mingw lève l'exception "std :: runtime_error: locale :: facet :: _ S_create_c_locale name non valide" lorsque j'essaie de construire std :: ctype_byname avec l'argument "ru_RU.UTF-8". Comment j'implémente/trouve std :: ctype pour utf-8 sur Windows?
Le projet dépend déjà de libiconv (la facette codecvt est basée dessus), mais je ne vois pas de moyen évident d'implémenter to_lower avec.
La raison pour laquelle ctype ne peut pas gérer les codages multi-octets est qu'il ne peut pas modifier la taille du symbole. Les conversions Utf-8 doivent être gérées par une interface différente. Désolé, je n'ai pas pu l'obtenir plus tôt. – Basilevs
De ma mémoire 'glibc' génère des informations pour différents paramètres régionaux. Il se peut que les fichiers de paramètres régionaux pertinents n'aient pas été installés sur la machine en question. – user1095108