En C #, quelle est la différence entre ToUpper()
et ToUpperInvariant()
?
Pouvez-vous donner un exemple où les résultats pourraient être différents?
c#
internationalization
Lill Lansey
la source
la source
Réponses:
ToUpper
utilise la culture actuelle.ToUpperInvariant
utilise la culture invariante.L'exemple canonique est la Turquie, où la majuscule de «i» n'est pas «je».
Exemple de code montrant la différence:
Pour en savoir plus sur le turc, consultez cet article de blog Turkey Test .
Je ne serais pas surpris d'entendre qu'il y a divers autres problèmes de capitalisation autour des personnages élidés, etc. Ce n'est qu'un exemple que je connais d'emblée ... en partie parce que cela m'a mordu il y a des années à Java, où j'étais supérieur -caser une chaîne et la comparer avec "MAIL". Cela n'a pas si bien fonctionné en Turquie ...
la source
ımage
demande à Visual Studio de suggérer comme nom de champImage
et de spam Unity 3D une erreur interne à la consoleUnable to find key name that matches 'rıght'
sur un Windows "anglais" avec les paramètres régionaux de Turquie pour la date et l'heure. On dirait que parfois même Microsoft échoue au test de la Turquie, la langue d'un PC n'est même pas le turc, juste lol.La réponse de Jon est parfaite. Je voulais juste ajouter que
ToUpperInvariant
c'est la même chose que d'appelerToUpper(CultureInfo.InvariantCulture)
.Cela rend l'exemple de Jon un peu plus simple:
J'ai aussi utilisé New Times Roman car c'est une police plus cool.
J'ai également mis le
Form
'sFont
propriété au lieu des deuxLabel
contrôles car laFont
propriété est héritée.Et j'ai réduit quelques autres lignes simplement parce que j'aime le code compact (exemple, pas de production).
Je n'avais vraiment rien de mieux à faire pour le moment.
la source
Commencez avec MSDN
http://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx
Ce n'est pas toujours parce qu'un i majuscule est «je» en anglais.
la source
String.ToUpper
etString.ToLower
peut donner des résultats différents selon les cultures. L'exemple le plus connu est l'exemple turc , pour lequel la conversion du latin minuscule "i" en majuscule ne se traduit pas par un "I" latin majuscule, mais par le "I" turc.Quant à moi, c'était déroutant même avec l'image ci-dessus ( source ), j'ai écrit un programme (voir le code source ci-dessous) pour voir la sortie exacte de l'exemple turc:
Comme vous pouvez le voir:
Culture.CultureInvariant
laisse les caractères turcs tels quelsToUpper
etToLower
sont réversibles, c'est-à-dire en minuscules un caractère après l'avoir mis en majuscules, le ramène à la forme d'origine, tant que pour les deux opérations la même culture a été utilisée.Selon MSDN , pour Char.ToUpper et Char.ToLower, le turc et l'azéri sont les seules cultures affectées car ce sont les seules avec des différences de casse à un seul caractère. Pour les chaînes, d'autres cultures peuvent être affectées.
Code source d'une application console utilisée pour générer la sortie:
la source
ToUpperInvariant utilise les règles de la culture invariante
la source
il n'y a pas de différence en anglais. ce n'est que dans la culture turque qu'une différence peut être trouvée.
la source