строка strTurkish = "ÜST";
как сделать значение strTurkish как "UST"?
строка strTurkish = "ÜST";
как сделать значение strTurkish как "UST"?
var text = "ÜST";
var unaccentedText = String.Join("", text.Normalize(NormalizationForm.FormD)
.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
Я не специалист по подобным вещам, но я думаю, вы можете использовать string.Normalize
для этого, разложив значение и затем эффективно удаляя символы, отличные от 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);
}
}
Вполне возможно, что в некоторых случаях это делает ужасные вещи.
Вы можете использовать следующий метод для решения своей проблемы. Другие методы не преобразуют "Turkish Lowercase я (\ 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();
}
Это не проблема, требующая общего решения. Известно, что только 12 специальных символов в турецком алфавите должны быть нормализованы. Это ı, İ, ö, Ö, ç, Ç, ü, Ü, ğ, Ğ, ş, Ş. Вы можете написать 12 правил, чтобы заменить их своими английскими аналогами: i, I, o, O, c, C, u, U, g, G, s, S.
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