2010-04-20 7 views

Odpowiedz

1

Jeśli twój ciąg jest w adresie URL, to zakładam, że jest to zwykły, niesformatowany tekst w postaci znaków unicode (w przeciwieństwie do dokumentu MS Word na przykład). W kodzie Unicode: you can only have certain characters as superscript or subscript. Nie jest ich wiele i wystarczyłaby prosta instrukcja zmiany.

Jeśli próbujesz przekonwertować sformatowany tekst, który może zawierać wszystkie rodzaje znaków jako indeks górny lub dolny, oznacza to, że nie są one bezpośrednio reprezentowane jako kod Unicode i zależy to w dużej mierze od formatu tekstu. Jeśli tak, proszę podać więcej informacji w pytaniu.

+1

Należy zauważyć, że wszystkie super- i dolne indeksy w kodzie Unicode mają rozkład do swoich normalnych odpowiedników znakowych. Tak więc powinno to działać bez zakodowanej automatycznie instrukcji 'switch' z dowolnego wyboru znaków. – Joey

4

Dzięki Johannes, ustawiłeś mnie na właściwej drodze. Kod z którymi mam go do pracy wygląda następująco:

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

Próbowałem rozkład kanoniczny wcześniej, ale potrzebny rozkład zgodności działał poprawnie.

Powiązane problemy