Dalam C #, apa perbedaan antara ToUpper()
dan ToUpperInvariant()
?
Bisakah Anda memberi contoh di mana hasilnya mungkin berbeda?
c#
internationalization
Lill Lansey
sumber
sumber
Jawaban:
ToUpper
menggunakan budaya saat ini.ToUpperInvariant
menggunakan budaya invarian.Contoh kanonik adalah Turki, di mana huruf "i" bukan "aku".
Kode sampel menunjukkan perbedaan:
Untuk lebih lanjut tentang bahasa Turki, lihat posting blog Tes Turki ini .
Saya tidak akan terkejut mendengar bahwa ada berbagai masalah kapitalisasi lain di sekitar karakter yang dihapus dll -menarik string dan membandingkannya dengan "MAIL". Itu tidak bekerja dengan baik di Turki ...
sumber
ımage
sebagai nama bidang untukImage
dan Unity 3D spamming kesalahan internal ke konsolUnable to find key name that matches 'rıght'
pada Windows "Inggris" dengan pengaturan regional Turki untuk tanggal dan waktu. Sepertinya kadang-kadang bahkan Microsoft gagal dalam tes Turki, bahasa PC bahkan bukan Turki, hanya lol.Jawaban Jon sempurna. Saya hanya ingin menambahkan itu
ToUpperInvariant
sama dengan meneleponToUpper(CultureInfo.InvariantCulture)
.Itu membuat contoh Jon sedikit lebih sederhana:
Saya juga menggunakan New Times Roman karena ini adalah font yang lebih keren.
Saya juga mengatur
Form
'sFont
properti bukannya duaLabel
kontrol karenaFont
properti diwariskan.Dan saya mengurangi beberapa baris lain hanya karena saya suka kode kompak (misalnya, bukan produksi).
Saya benar-benar tidak memiliki hal yang lebih baik untuk dilakukan saat ini.
sumber
Mulai dengan MSDN
http://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx
Hanya karena modal saya adalah 'saya' dalam bahasa Inggris, tidak selalu membuatnya demikian.
sumber
String.ToUpper
danString.ToLower
dapat memberikan hasil yang berbeda mengingat budaya yang berbeda. Contoh yang paling dikenal adalah contoh Turki , yang mengubah huruf latin "i" menjadi huruf kapital, tidak menghasilkan huruf latin "I", tetapi dalam bahasa Turki "I".Bagi saya itu membingungkan bahkan dengan gambar di atas ( sumber ), saya menulis sebuah program (lihat kode sumber di bawah) untuk melihat output yang tepat untuk contoh Turki:
Seperti yang Anda lihat:
Culture.CultureInvariant
meninggalkan karakter Turki apa adanyaToUpper
danToLower
bersifat reversibel, yaitu menurunkan karakter setelah menaikkannya, membawanya ke bentuk asli, selama kedua operasi budaya yang sama digunakan.Menurut MSDN , untuk Char.ToUpper dan Char.ToLower Turki dan Azeri adalah satu-satunya budaya yang terpengaruh karena mereka adalah satu-satunya dengan perbedaan casing karakter tunggal. Untuk string, mungkin ada lebih banyak budaya yang terpengaruh.
Kode sumber aplikasi konsol yang digunakan untuk menghasilkan output:
sumber
ToUpperInvariant menggunakan aturan dari budaya invarian
sumber
tidak ada perbedaan dalam bahasa inggris. hanya dalam budaya Turki perbedaan dapat ditemukan.
sumber