80 votes

Que fait String.Normalize de .NET?

L' article de MSDN sur String.Normalize dit simplement:

Renvoie une nouvelle chaîne dont la représentation binaire est sous une forme de normalisation Unicode particulière.

Et faisant parfois référence à une "forme C de normalisation Unicode"

Je me demande juste, qu'est-ce que ça veut dire? En quoi cette fonction est-elle utile dans des situations réelles?

78voto

Hans Kesting Points 17043

Une différence entre la forme C et la forme D est la façon dont les lettres avec accents sont représentées: la forme C utilise un code de lettre simple avec accent, tandis que la forme D la sépare en une lettre et un accent.

Un effet secondaire est que cela permet de créer facilement une méthode "enlever les accents".

     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)
    }
 

53voto

Oded Points 271275

Il permet de s'assurer que les chaînes unicode peut être comparé pour l'égalité (même si elles sont à l'aide de différents encodages unicode).

À Partir De La Norme Unicode Annexe N ° 15:

Essentiellement, la Normalisation Unicode Algorithme met toutes les marques de combinaison dans un ordre précis, et utilise des règles pour la décomposition et de la composition de transformer chaque chaîne dans l'une des Formes de Normalisation Unicode. Une comparaison binaire de la transformation des chaînes de déterminer l'équivalence.

6voto

devio Points 22981

En Unicode, un caractère (composé) peut avoir un point de code unique ou une séquence de points de code comprenant le caractère de base et ses accents.

Wikipedia donne comme exemple le vietnamien ế (U +1EBF) et sa séquence décomposée U +0065 (e) U +0302 (accent circonflexe) U +0301 (accent aigu).

string.Normalize () convertit entre les 4 formes normales, une chaîne peut être codée en Unicode.

5voto

Adam Houldsworth Points 38632

Ce lien a une bonne explication:

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

De ce que je peux en déduire, cela vous permet de comparer deux chaînes unicode pour l’égalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X