Как конвертировать супер- или нижний индекс в обычный текст в C # - PullRequest
8 голосов
/ 20 апреля 2010

Я пишу генератор слагов для создания хороших URL. Я хотел бы преобразовать м² в м2, но в общем случае, который делает это для всего верхнего индекса (или нижнего индекса), а не просто для замены оператора.

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 20 апреля 2010

Спасибо, Йоханнес, вы поставили меня на правильный путь. Код, с которым я начал работать, выглядит следующим образом:

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

Ранее я пробовал каноническое разложение, но для правильной работы требовалось разложение совместимости.

1 голос
/ 20 апреля 2010

Если ваша строка входит в URL, то я предполагаю, что это какой-то обычный неформатированный текст в виде символов Юникода (в отличие от документа MS Word, например). В юникоде вы можете иметь только определенные символы в виде верхнего или нижнего индекса . Их не так много, и простой оператор switch сделает эту работу.

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

...