Как преобразовать верхний или нижний индекс в обычный текст в C #

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

Любые идеи?


person Jorrit Salverda    schedule 20.04.2010    source источник


Ответы (2)


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

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

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

person Jorrit Salverda    schedule 20.04.2010

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

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

person Slavo    schedule 20.04.2010
comment
Обратите внимание, что все надстрочные и подстрочные индексы в Юникоде разложены на их обычные символьные аналоги. Так что на самом деле это должно работать без жестко запрограммированного switch оператора произвольного выбора символов. - person Joey; 20.04.2010