9
votes

Pourquoi la fonction de remplissage () ne convertit pas le я en une minuscule?

La fonction Towlower () ne semble pas fonctionner dans Visual Studio 2012. Voici un exemple: xxx

Le caractère reste majuscule. Des questions similaires ont été posées ici auparavant, mais je ne trouve aucune solution.

existe une autre méthode que je peux utiliser pour changer en minuscule?


14 commentaires

Nous fermons toutes les questions de TYPO, au fait.


@ H2CO3: Maintenant tu m'as trompé aussi :(. Voir Toupleur


Que veux-tu dire? Il n'y a pas de faute de frappe.


Aucun typo c'est un appel valide. Cplusplus.com/reference/cwctype/twlower


Vous devez définir manuellement un local depuis que C ++ par défaut utilise la locale invariante C, quoi qu'il arrive. Je ne sais pas les locaux Unicode installés sur Windows, cependant.


@Zeta DAMN. Mince! MINCE! C'est ce qui se passe quand je ne suis pas rtfm ... désolé. :-(


Peut-être que le nouveau titre gardera les clowns d'essayer de fermer cette question. C'est en fait un très bon, un +1 de moi.


@Codygray the Visual-Studio-2012 tag était assez pertinent en réalité ...


@Konrad vraiment, pourquoi? Qu'est-ce qui a changé dans VS 2012 qui affecte ce comportement?


@ H2CO3 et la question a maintenant accumulé des votes proches qui ont tendance à attirer des votes plus closes. Bon appel. ;)


@jalf: Ne pensez-vous pas que "trop ​​localisé" est juste un méta-jeun?


@jalf j'ai signalé cela pour refléter mon erreur, je ne sais pas si les modérateurs peuvent annuler des votes closes erronées, cependant ...


@Codygray la plate-forme est importante. Les locaux par exemple ont des noms différents sur différentes plates-formes et c'est un détail pertinent ici.


Utilisez l'ICU. Ou mieux, utilisez l'ICU Thru Boost :: locale


3 Réponses :


0
votes

Est-ce que cela fait moins de dégâts que la squelette? j / k. Je ne connais pas avec le R inversé, mais je sais que si le personnage n'a pas d'équivalent en minuscule, à (W) inférieur retournera le caractère d'origine. http://fr.cppreference.com/w/c/string/wide/twlower


0 commentaires

5
votes

Je vois deux possibilités. Le premier est que les paramètres régionaux ne sont pas réglés correctement. De MSDN :

La conversion de cas de Towlower est spécifique à la locale. Seuls les personnages pertinents pour le courant Les paramètres régionaux sont changés au cas où. Les fonctions sans le suffixe _l utilisent la locale actuellement définie.

Le second est le fichier source codant. L'ð¯ ' pourrait signifier différentes choses en fonction de ce que votre fichier source est codé. Cela ne fonctionnera pas, par exemple, si vous l'avez dans UTF-8 . Assurez-vous de l'avoir dans UTF-16 . Ou pour éliminer toute confusion possible, mettez-la comme ce '\ u042f'

Mise à jour: sur la deuxième pensée de ce tout l Les affaires sont difficiles. Si le compilateur comprend correctement le codage, via Bom par exemple, cela peut correspondre à ce que utf-8 ou tout autre codage. Important qu'il faut savoir quel est le codage. Il doit s'agir de très bien de la mise en œuvre spécifique.

une autre mise à jour: Pour résoudre le problème, essayez de définir les paramètres régionaux via: xxx

Ou utilisez la version qui prend la locale sous forme de paramètre ( _tulewower_l ).

et il y a aussi sur tout ce qu'un pragma qui indique au compilateur comment traiter les littéraux de chaînes non ASCII dans le fichier.


2 commentaires

Par défaut, je crois que VC ++ traite les fichiers source comme Windows-1252 codé (alias presque-mais pas-tout à fait latin1), ce qui signifie que les caractères de fantaisie comme я sont susceptibles de se faire mutiler. Donc, oui, utilisez définitivement \ u042f . :)


VC ++ reconnaît l'ONUICODE BOM et agit en conséquence, même dans les fichiers UTF-8.



6
votes

Utilisez la version Code> Tolower Code>, mais n'oubliez pas de définir également la locale C.

Par exemple: P>

The letter is: Я => я


0 commentaires