c# - pronuncia - ¿Cómo convertir caracteres turcos a caracteres ingleses en una cadena?
estambul (5)
string strTurkish = "ÜST";
¿Cómo hacer valor de strTurkish como "UST"?
Este no es un problema que requiera una solución general. Se sabe que solo hay 12 caracteres especiales en el alfabeto turco que deben normalizarse. Esos son ı, İ, ö, Ö, ç, Ç, ü, Ü, ğ, Ğ, ş, Ş. Puedes escribir 12 reglas para reemplazarlas con sus contrapartes en inglés: i, I, o, O, c, C, u, U, g, G, s, S.
No soy un experto en este tipo de cosas, pero creo que puedes usar una string.Normalize
para hacerlo, descomponiendo el valor y luego eliminando de manera efectiva los caracteres que no son 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);
}
}
Sin embargo, es totalmente posible que esto haga cosas horribles en algunos casos.
Puedes usar el siguiente método para resolver tu problema. Los otros métodos no convierten "Turco Minúscula I (/ u0131) correctamente".
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();
}
var text = "ÜST";
var unaccentedText = String.Join("", text.Normalize(NormalizationForm.FormD)
.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
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