CHỈNH SỬA Sau khi kết hợp câu hỏi này với Cách so sánh 'μ' và 'µ' trong C #
Câu trả lời gốc được đăng:
"μ".ToUpper().Equals("µ".ToUpper()); //This always return true.
CHỈNH SỬA
Sau khi đọc các nhận xét, có, không tốt nếu sử dụng phương pháp trên vì nó có thể cung cấp kết quả sai cho một số loại đầu vào khác, đối với điều này, chúng ta nên sử dụng bình thường hóa bằng cách sử dụng phân rã tương thích hoàn toàn như đã đề cập trong wiki . (Cảm ơn câu trả lời được đăng bởi BoltClock )
static string GREEK_SMALL_LETTER_MU = new String(new char[] { '\u03BC' });
static string MICRO_SIGN = new String(new char[] { '\u00B5' });
public static void Main()
{
string Mus = "µμ";
string NormalizedString = null;
int i = 0;
do
{
string OriginalUnicodeString = Mus[i].ToString();
if (OriginalUnicodeString.Equals(GREEK_SMALL_LETTER_MU))
Console.WriteLine(" INFORMATIO ABOUT GREEK_SMALL_LETTER_MU");
else if (OriginalUnicodeString.Equals(MICRO_SIGN))
Console.WriteLine(" INFORMATIO ABOUT MICRO_SIGN");
Console.WriteLine();
ShowHexaDecimal(OriginalUnicodeString);
Console.WriteLine("Unicode character category " + CharUnicodeInfo.GetUnicodeCategory(Mus[i]));
NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormC);
Console.Write("Form C Normalized: ");
ShowHexaDecimal(NormalizedString);
NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormD);
Console.Write("Form D Normalized: ");
ShowHexaDecimal(NormalizedString);
NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormKC);
Console.Write("Form KC Normalized: ");
ShowHexaDecimal(NormalizedString);
NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormKD);
Console.Write("Form KD Normalized: ");
ShowHexaDecimal(NormalizedString);
Console.WriteLine("_______________________________________________________________");
i++;
} while (i < 2);
Console.ReadLine();
}
private static void ShowHexaDecimal(string UnicodeString)
{
Console.Write("Hexa-Decimal Characters of " + UnicodeString + " are ");
foreach (short x in UnicodeString.ToCharArray())
{
Console.Write("{0:X4} ", x);
}
Console.WriteLine();
}
Đầu ra
INFORMATIO ABOUT MICRO_SIGN
Hexa-Decimal Characters of µ are 00B5
Unicode character category LowercaseLetter
Form C Normalized: Hexa-Decimal Characters of µ are 00B5
Form D Normalized: Hexa-Decimal Characters of µ are 00B5
Form KC Normalized: Hexa-Decimal Characters of µ are 03BC
Form KD Normalized: Hexa-Decimal Characters of µ are 03BC
________________________________________________________________
INFORMATIO ABOUT GREEK_SMALL_LETTER_MU
Hexa-Decimal Characters of µ are 03BC
Unicode character category LowercaseLetter
Form C Normalized: Hexa-Decimal Characters of µ are 03BC
Form D Normalized: Hexa-Decimal Characters of µ are 03BC
Form KC Normalized: Hexa-Decimal Characters of µ are 03BC
Form KD Normalized: Hexa-Decimal Characters of µ are 03BC
________________________________________________________________
Trong khi đọc thông tin bằng Unicode_equivalence, tôi đã tìm thấy
Việc lựa chọn tiêu chí tương đương có thể ảnh hưởng đến kết quả tìm kiếm. Ví dụ: một số chữ ghép kiểu chữ như U + FB03 (ffi), ..... vì vậy tìm kiếm U + 0066 (f) làm chuỗi con sẽ thành công trong chuẩn hóa NFKC của U + FB03 nhưng không thành công trong chuẩn hóa NFC của U + FB03.
Vì vậy, để so sánh sự tương đương, thông thường chúng ta nên sử dụng FormKC
tức là chuẩn hóa NFKC hoặc FormKD
tức là chuẩn hóa NFKD.
Tôi hơi tò mò muốn biết thêm về tất cả các ký tự Unicode nên tôi đã tạo mẫu sẽ lặp lại trên tất cả các ký tự Unicode trong đó UTF-16
và tôi nhận được một số kết quả mà tôi muốn thảo luận
- Thông tin về các ký tự có giá trị
FormC
và FormD
giá trị chuẩn hóa không tương đương
Total: 12,118
Character (int value): 192-197, 199-207, 209-214, 217-221, 224-253, ..... 44032-55203
- Thông tin về các ký tự có giá trị
FormKC
và FormKD
giá trị chuẩn hóa không tương đương
Total: 12,245
Character (int value): 192-197, 199-207, 209-214, 217-221, 224-228, ..... 44032-55203, 64420-64421, 64432-64433, 64490-64507, 64512-64516, 64612-64617, 64663-64667, 64735-64736, 65153-65164, 65269-65274
- Tất cả ký tự có giá trị
FormC
và FormD
giá trị chuẩn hóa không tương đương, ở đó FormKC
và FormKD
giá trị chuẩn hóa cũng không tương đương ngoại trừ các ký tự này Các ký
tự:901 '΅', 8129 '῁', 8141 '῍', 8142 '῎', 8143 '῏', 8157 '῝', 8158 '῞'
, 8159 '῟', 8173 '῭', 8174 '΅'
- Ký tự phụ có giá trị
FormKC
và FormKD
giá trị chuẩn hóa không tương đương, nhưng ở đó FormC
và FormD
giá trị chuẩn hóa là tương đương
Total: 119
Các ký tự:452 'DŽ' 453 'Dž' 454 'dž' 12814 '㈎' 12815 '㈏' 12816 '㈐' 12817 '㈑' 12818 '㈒'
12819 '㈓' 12820 '㈔' 12821 '㈕', 12822 '㈖' 12823 '㈗' 12824 '㈘' 12825 '㈙' 12826 '㈚'
12827 '㈛' 12828 '㈜' 12829 '㈝' 12830 '㈞' 12910 '㉮' 12911 '㉯' 12912 '㉰' 12913 '㉱'
12914 '㉲' 12915 '㉳' 12916 '㉴' 12917 '㉵' 12918 '㉶' 12919 '㉷' 12920 '㉸' 12921 '㉹' 12922 '㉺' 12923 '㉻' 12924 '㉼' 12925 '㉽' 12926 '㉾' 13056 '㌀' 13058 '㌂' 13060 '㌄' 13063 '㌇' 13070 '㌎' 13071 '㌏' 13072 '㌐' 13073 '㌑' 13075 '㌓' 13077 '㌕' 13080 '㌘' 13081 '㌙' 13082 '㌚' 13086 '㌞' 13089 '㌡' 13092 '㌤' 13093 '㌥' 13094 '㌦' 13099 '㌫' 13100 '㌬' 13101 '㌭' 13102 '㌮' 13103 '㌯' 13104 '㌰' 13105 '㌱' 13106 '㌲' 13108 '㌴' 13111 '㌷' 13112 '㌸' 13114 '㌺' 13115 '㌻' 13116 '㌼' 13117 '㌽' 13118 '㌾' 13120 '㍀' 13130 '㍊' 13131 '㍋' 13132 '㍌' 13134 '㍎' 13139 '㍓' 13140 '㍔' 13142 '㍖' .......... ﺋ' 65164 'ﺌ' 65269 'ﻵ' 65270 'ﻶ' 65271 'ﻷ' 65272 'ﻸ' 65273 'ﻹ' 65274'
- Có một số ký tự không thể được chuẩn hóa , họ sẽ ném
ArgumentException
nếu cố gắng
Total:2081
Characters(int value): 55296-57343, 64976-65007, 65534
Các liên kết này có thể thực sự hữu ích để hiểu những quy tắc nào chi phối sự tương đương của Unicode
- Unicode_equivalence
- Unicode_compatibility_characters