string strTurkish = "ÜST";Jak przekonwertować znaki tureckie na angielskie w ciągu znaków?
Jak ustawić wartość strTurkish jako "UST"?
string strTurkish = "ÜST";Jak przekonwertować znaki tureckie na angielskie w ciągu znaków?
Jak ustawić wartość strTurkish jako "UST"?
var text = "ÜST";
var unaccentedText = String.Join("", text.Normalize(NormalizationForm.FormD)
.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
to nie znormalizuje 'ı'. Jakieś inne rozwiązanie? – jackjop
'var text =" ÜST "; var unaccentedText = String.Join ("", text.Normalize (NormalizationForm.FormD) .Where (c => char.GetUnicodeCategory (c)! = UnicodeCategory.NonSpacingMark)). Zamień ("ı", "i") ; ' // swh –
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.
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();
}
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.
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
Czy byłby to rodzaj mapowania UTF do ASCII? – LamonteCristo
Czy wszystkie postaci z Turcji będą mapować tylko jedną postać z zakresu A-Z a-z? – LamonteCristo