Was ist in C # der Unterschied zwischen ToUpper()
und ToUpperInvariant()
?
Können Sie ein Beispiel geben, bei dem die Ergebnisse unterschiedlich sein könnten?
c#
internationalization
Lill Lansey
quelle
quelle
Antworten:
ToUpper
nutzt die aktuelle Kultur.ToUpperInvariant
nutzt die invariante Kultur.Das kanonische Beispiel ist die Türkei, wo der Großbuchstabe von "i" nicht "I" ist.
Beispielcode, der den Unterschied zeigt:
Weitere Informationen zum Türkischen finden Sie in diesem Blog-Beitrag zum Türkei-Test .
Es würde mich nicht wundern zu hören, dass es verschiedene andere Großschreibungsprobleme bei elidierten Charakteren usw. gibt. Dies ist nur ein Beispiel, das ich aus dem Kopf kenne ... teilweise, weil es mich vor Jahren in Java gebissen hat, wo ich oben war - einen String umhüllen und mit "MAIL" vergleichen. Das hat in der Türkei nicht so gut funktioniert ...
quelle
ımage
als Feldnamen fürImage
und Unity 3D vorgeschlagen, einen internen Fehler an die KonsoleUnable to find key name that matches 'rıght'
auf einem "englischen" Windows mit regionalen Einstellungen für die Türkei für Datum und Uhrzeit zu spammen. Es sieht so aus, als ob manchmal sogar Microsoft den Türkei-Test nicht besteht. Die Sprache eines PCs ist nicht einmal Türkisch, nur lol.Jons Antwort ist perfekt. Ich wollte nur hinzufügen, dass
ToUpperInvariant
das dasselbe ist wie anrufenToUpper(CultureInfo.InvariantCulture)
.Das macht Jons Beispiel etwas einfacher:
Ich habe auch New Times Roman verwendet, weil es eine coolere Schriftart ist.
Ich habe auch die Eigenschaft
Form
'sFont
anstelle der beidenLabel
Steuerelemente festgelegt, da dieFont
Eigenschaft vererbt wird.Und ich habe ein paar andere Zeilen reduziert, nur weil ich kompakten Code (zum Beispiel keinen Produktionscode) mag.
Ich hatte im Moment wirklich nichts Besseres zu tun.
quelle
Beginnen Sie mit MSDN
http://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx
Nur weil ein Kapital i ist ‚I‘ in Englisch, nicht immer , es so machen.
quelle
String.ToUpper
undString.ToLower
kann bei unterschiedlichen Kulturen unterschiedliche Ergebnisse liefern. Das bekannteste Beispiel ist das türkische Beispiel , bei dem die Konvertierung von lateinischem "i" in Großbuchstaben nicht zu einem großgeschriebenen lateinischen "I" führt, sondern zum türkischen "I".Was mich selbst mit dem obigen Bild ( Quelle ) verwirrte , schrieb ich ein Programm (siehe Quellcode unten), um die genaue Ausgabe für das türkische Beispiel zu sehen:
Wie du siehst:
Culture.CultureInvariant
Lässt die türkischen Zeichen wie sie sindToUpper
undToLower
sind reversibel, dh wenn ein Zeichen nach dem Großbuchstaben in Kleinbuchstaben geschrieben wird, wird es in die ursprüngliche Form gebracht, solange für beide Operationen dieselbe Kultur verwendet wurde.Laut MSDN sind für Char.ToUpper und Char.ToLower Türkisch und Aserbaidschanisch die einzigen betroffenen Kulturen, da sie die einzigen sind, die Unterschiede in der Groß- und Kleinschreibung aufweisen. Bei Saiten sind möglicherweise mehr Kulturen betroffen.
Quellcode einer Konsolenanwendung, mit der die Ausgabe generiert wird:
quelle
ToUpperInvariant verwendet die Regeln aus der invarianten Kultur
quelle
Es gibt keinen Unterschied in Englisch. Nur in der türkischen Kultur kann ein Unterschied festgestellt werden.
quelle