Как преобразовать турецкие символы в английские символы в строке? - программирование
Подтвердить что ты не робот

Как преобразовать турецкие символы в английские символы в строке?

строка strTurkish = "ÜST";

как сделать значение strTurkish как "UST"?

4b9b3361

Ответ 1

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

Ответ 2

Я не специалист по подобным вещам, но я думаю, вы можете использовать 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);
    }    
}

Вполне возможно, что в некоторых случаях это делает ужасные вещи.

Ответ 3

Вы можете использовать следующий метод для решения своей проблемы. Другие методы не преобразуют "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();
}

Ответ 4

Это не проблема, требующая общего решения. Известно, что только 12 специальных символов в турецком алфавите должны быть нормализованы. Это ı, İ, ö, Ö, ç, Ç, ü, Ü, ğ, Ğ, ş, Ş. Вы можете написать 12 правил, чтобы заменить их своими английскими аналогами: i, I, o, O, c, C, u, U, g, G, s, S.

Ответ 5

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