Что? does.NET-это струна.Нормализовать сделать?


The статья MSDN в строке.Нормализовать государства просто:

возвращает новую строку, двоичное представление которой находится в определенной форме нормализации Юникода.

и иногда ссылаясь на"форму нормализации Юникода C."

Мне просто интересно, что это значит? Насколько эта функция полезна в реальных жизненных ситуациях?

4 58

4 ответа:

он гарантирует, что строки Юникода можно сравнить для равенства (даже если они используют разные кодировки Юникода).

От Unicode Standard приложение № 15:

по существу, алгоритм нормализации Юникода помещает все объединяющие метки в заданном порядке и использует правила декомпозиции и композиции для преобразования каждой строки в одну из форм нормализации Юникода. Затем будет выполнено двоичное сравнение преобразованных строк определите эквивалентность.

одно различие между формой C и формой D заключается в том, как представлены буквы с акцентами: форма C использует одну букву с акцентом, а форма D разделяет ее на букву и акцент.

например, "à"может быть кодовой точкой 224 ("Латинская строчная буква A с могилой") или кодовой точкой 97 ("Латинская строчная буква A"), за которой следует кодовая точка 786 ("комбинирование серьезного акцента").

побочный эффект заключается в том, что это позволяет легко создать "удалить акценты" метод.

    public static string RemoveAccents(string input)
    {
        return new string(
            input
            .Normalize(System.Text.NormalizationForm.FormD)
            .ToCharArray()
            .Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
            .ToArray());
        // the normalization to FormD splits accented letters in accents+letters
        // the rest removes those accents (and other non-spacing characters)
    }

в Юникоде (составленный) символ может иметь либо уникальную кодовую точку, либо последовательность кодовых точек, состоящую из базового символа и его акцентов.

Википедия перечисляет в качестве примера вьетнамский ế (U+1EBF) и его разложенную последовательность U+0065 (e) U+0302 (circumflex accent) U+0301 (acute accent).

строку.Normalize () преобразует между 4 нормальными формами строку можно закодировать в Юникоде.

эта ссылка имеет хорошее объяснение:

http://unicode.org/reports/tr15/#Norm_Forms

из того, что я могу предположить, его так что вы можете сравнить две строки Юникода для равенства.