Gracias Johannes, me pones en el camino correcto. El código con el que lo tengo al trabajo se ve de la siguiente manera:
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);
}
Probé la descomposición canónica antes, pero es necesaria la descomposición de compatibilidad para que funcione correctamente.
Tenga en cuenta que todos los superíndices y subíndices en Unicode tienen una descomposición en sus equivalentes de caracteres normales. Así que eso debería funcionar sin una sentencia '' switch'' codificada de una selección arbitraria de caracteres, en realidad. – Joey