2012-12-01 19 views

Odpowiedz

15
var text = "ÜST"; 
var unaccentedText = String.Join("", text.Normalize(NormalizationForm.FormD) 
     .Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)); 
+2

to nie znormalizuje 'ı'. Jakieś inne rozwiązanie? – jackjop

+0

'var text =" ÜST "; var unaccentedText = String.Join ("", text.Normalize (NormalizationForm.FormD) .Where (c => char.GetUnicodeCategory (c)! = UnicodeCategory.NonSpacingMark)). Zamień ("ı", "i") ; ' // swh –

7

Nie jestem ekspertem od tego typu rzeczy, ale myślę można użyć string.Normalize to zrobić poprzez rozłożenie wartości, a następnie skutecznie usuwając e znaki spoza ASCII:

using System; 
using System.Linq; 
using System.Text; 

class Test 
{ 
    static void Main() 
    { 
     string text = "\u00DCST"; 
     string normalized = text.Normalize(NormalizationForm.FormD); 
     string asciiOnly = new string(normalized.Where(c => c < 128).ToArray()); 
     Console.WriteLine(asciiOnly); 
    }  
} 

Jest całkiem możliwe, że w niektórych przypadkach robi to straszne rzeczy.

8

Możesz użyć następującej metody rozwiązania problemu. Inne metody nie konwertują poprawnie "Turkish Smallcase I (\ u0131)".

public static string RemoveDiacritics(string text) 
{ 
    Encoding srcEncoding = Encoding.UTF8; 
    Encoding destEncoding = Encoding.GetEncoding(1252); // Latin alphabet 

    text = destEncoding.GetString(Encoding.Convert(srcEncoding, destEncoding, srcEncoding.GetBytes(text))); 

    string normalizedString = text.Normalize(NormalizationForm.FormD); 
    StringBuilder result = new StringBuilder(); 

    for (int i = 0; i < normalizedString.Length; i++) 
    { 
     if (!CharUnicodeInfo.GetUnicodeCategory(normalizedString[i]).Equals(UnicodeCategory.NonSpacingMark)) 
     { 
      result.Append(normalizedString[i]); 
     } 
    } 

    return result.ToString(); 
} 
2

To nie jest problem, który wymaga ogólnego rozwiązania. Wiadomo, że w alfabecie tureckim jest tylko 12 znaków specjalnych, które należy znormalizować. Są to ı, ı, ö, Ö, ç, Ç, ü, Ü, ğ, Ğ, ş, Ş. Możesz zapisać 12 zasad, aby zastąpić je angielskimi odpowiednikami: i, I, o, O, c, C, u, U, g, G, s, S.

1
Public Function Ceng(ByVal _String As String) As String 
    Dim Source As String = "ığüşöçĞÜŞİÖÇ" 
    Dim Destination As String = "igusocGUSIOC" 
    For i As Integer = 0 To Source.Length - 1 
     _String = _String.Replace(Source(i), Destination(i)) 
    Next 
    Return _String 
End Function 
Powiązane problemy