Comment convertir super-ou Indice en texte normal en C#

j'écris un générateur de slug pour faire de belles urls. Je voudrais convertir m2 en m2, mais d'une manière générique qui fait cela pour tout exposant (ou Indice), pas seulement une simple déclaration de remplacement.

des idées?

7
demandé sur Jorrit Salverda 2010-04-20 12:04:20

2 réponses

Merci Johannes, tu m'as mis sur la bonne voie. Le code avec lequel je l'ai fait fonctionner ressemble à ceci:

public string ConvertSuperscript(string value)
{
    string stringFormKd = value.Normalize(NormalizationForm.FormKD);
    StringBuilder stringBuilder = new StringBuilder();

    foreach (char character in stringFormKd)
    {
        UnicodeCategory unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(character);
        if (unicodeCategory != UnicodeCategory.NonSpacingMark)
        {
            stringBuilder.Append(character);
        }
    }

    return stringBuilder.ToString().Normalize(NormalizationForm.FormKC);
}

j'ai essayé la décomposition canonique avant, mais il fallait la décomposition de compatibilité pour fonctionner correctement.

5
répondu Jorrit Salverda 2010-04-20 14:18:27

si votre chaîne va dans L'URL, alors je suppose qu'il s'agit d'une sorte de texte régulier non formaté sous forme de caractères unicode (par opposition à un MS Word doc par exemple). Dans unicode, , vous ne pouvez avoir que certains caractères en exposant ou en indice . Ils ne sont pas si nombreux et une simple déclaration de changement ferait le travail.

si vous essayez de convertir le texte formaté qui pourrait contenir toutes sortes de caractères en exposant ou en indice, cela signifie qu'ils ne sont pas directement représentés en unicode, et cela dépend beaucoup du format du texte. Dans l'affirmative, veuillez donner plus d'informations dans la question.

1
répondu Slavo 2010-04-20 08:14:30