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

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

Какие-либо идеи?

8
задан Jorrit Salverda 20 April 2010 в 08:04
поделиться

2 ответа

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

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

1
ответ дан 5 December 2019 в 21:17
поделиться

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

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

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

6
ответ дан 5 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: