Convertir une Chaîne unicode En C++ Pour les majuscules
Comment on peut convertir un multi-langue pour une chaîne ou une chaîne unicode en majuscules/minuscules en C ou C++.
- Vérifiez ce thread stackoverflow.com/questions/1614595/.... Il pourrait vous aider.
- Qu'entendez-vous par "Unicode"? Il ya beaucoup de différents encodages définies par le standard Unicode—qui êtes-vous utiliser? UTF-8? UTF-16? UTF-32?
- google avant de risa une question ici
- Avec unicode, méfiez-vous si l'aide d'un tout en majuscules titre de comparaison, depuis de nombreuses implémentations ne sont pas correctement vérifiez quels sont les caractères en majuscules ou en minuscules.
- site.icu-project.org
Vous devez vous connecter pour publier un commentaire.
Si votre système est déjà en UTF-8, en utilisant
std::use_facet
, vous pouvez écrire:Et vous obtenez (http://ideone.com/AFHoHC):
Si ça ne marche pas, vous aurez à changer (*) en
std::locale::global(std::locale("en_US.UTF8"));
ou une locale UTF-8 en fait, vous avez sur la plateforme.std::locale::global(std::locale(""))
faire le travail?auto&
avecconst std::ctype<wchar_t>&
.J'ai trouvé 2 solution de ce problem_
1.
setlocale(LC_CTYPE, "en_US.UTF-8"); //les paramètres régionaux sera l'UTF-8 est activé anglais
c'est de travailler sur LLVM Compilateur GCC 4.2.
2.
std::locale::global(std::locale("en_US.UTF-8")); //les paramètres régionaux sera l'UTF-8 est activé anglais
Cela fonctionne dans Apple LLVM 4.2.
Les deux cas, j'ai couru sur Xocde.
Mais je viens de trouver un moyen d'exécuter ce code dans Eclipse avec le Compilateur g++.
Avec beaucoup de difficulté, si vous allez le faire.
L'habitude de cas d'utilisation pour ce qui est des fins de comparaison, mais le problème est plus général que cela.
Il est assez détaillé de papier à partir de C++ Rapport circa 2000 de Matt Austern ici (PDF)
Æ = æ
, mais que, probablement, est égale à AE, ae, AE ainsi.Définir la paramètres régionaux premier, exemple :
Ensuite utiliser
std::use_facet std::locale comme suit:-
transform
), mais uppercasing ß résultats de deux caractères.setlocale(LC_MONETARY, "French")
n'? Pensez-vous uppercasing "Chloë" a toute monétaire concerne-t-il? Si votre problème est de trouver de la documentation, c'est ici en.cppreference.com/w/cpp/locale/setlocale et voilà en.cppreference.com/w/cpp/locale/LC_categoriesDans Windows, pensez
CharUpperBuffW
etCharLowerBuffW
langue mixte applications où la locale est inconnue. Ces fonctions permettent de signes diacritiques oùtoupper()
ne pas.Vous pouvez itérer un
wstring
et l'utilisation towupper /towlowerSi vous voulez un sain d'esprit et de maturité de la solution, regardez IBM soins intensifs. Voici un exemple:
De sortie:
Remarque: Dans l'étape ultérieure
SS
n'est pas traitée en tant que capitale de l'allemandß
Pour C je voudrais utiliser
toupper
après le réglage de la locale C dans le thread courant.Pour le C++ je voudrais utiliser le
toupper
méthode destd::ctype<char>
:"tr_TR.UTF8"
.