Я пишу генератор краткого заголовка для того, чтобы сделать хорошие URL. Я хотел бы преобразовать m ² в m2, но универсальным способом, который делает это для всего верхнего индекса (или нижний индекс), не только простой оператор замены.
Какие-либо идеи?
Если ваша строка входит в URL-адрес, то я предполагаю, что это какой-то обычный неформатированный текст в виде символов Юникода (в отличие от документ MS Word, например). В юникоде вы можете использовать только определенные символы в качестве надстрочного или подстрочного индекса . Их не так много, и с этим справится простой оператор switch.
Если вы пытаетесь преобразовать форматированный текст, который может содержать всевозможные символы в виде надстрочного или подстрочного индекса, это означает, что они напрямую не представлены как Unicode, и это будет во многом зависеть от формата текста. Если да, просьба дать более подробную информацию в вопросе.
Спасибо, Йоханнес, ты наставил меня на правильный путь. Код, с которым я заставил его работать, выглядит следующим образом:
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);
}
Я пробовал каноническую декомпозицию раньше, но для правильной работы требовалась декомпозиция совместимости.