2010-04-20 150 views

Respuesta

1

Si su cadena va en la URL, entonces supongo que es algún tipo de texto regular no formateado en forma de caracteres Unicode (a diferencia de un documento de MS Word, por ejemplo). En unicode, you can only have certain characters as superscript or subscript. No son tantos y una simple declaración de cambio haría el trabajo.

Si está tratando de convertir texto formateado que podría contener todo tipo de caracteres como superíndice o subíndice, eso significa que no están representados directamente como unicode, y dependería mucho del formato del texto. Si es así, brinde más información en la pregunta.

+1

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

4

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.

Cuestiones relacionadas