string strTurkish = "ÜST";Come convertire i caratteri turchi in caratteri inglesi in una stringa?
come valorizzare strTurkish come "UST"?
string strTurkish = "ÜST";Come convertire i caratteri turchi in caratteri inglesi in una stringa?
come valorizzare strTurkish come "UST"?
var text = "ÜST";
var unaccentedText = String.Join("", text.Normalize(NormalizationForm.FormD)
.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
questo non normalizzerà 'ı'. Qualche altra soluzione? – jackjop
'var text =" ÜST "; var unaccentedText = String.Join ("", text.Normalize (NormalizationForm.FormD) .Where (c => char.GetUnicodeCategory (c)! = UnicodeCategory.NonSpacingMark)). Sostituisci ("ı", "i") ; ' // swh –
io non sono un esperto in questo genere di cose, ma io penso è possibile utilizzare string.Normalize
per farlo, decomponendo il valore e poi rimuovendo in modo efficace un caratteri non 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);
}
}
È comunque possibile che questo faccia cose orribili in alcuni casi.
È possibile utilizzare il seguente metodo per risolvere il problema. Gli altri metodi non convertono correttamente "Turco minuscolo 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();
}
Questo non è un problema che richiede una soluzione generale. È noto che ci sono solo 12 caratteri speciali nell'alfabeto turco che devono essere normalizzati. Quelli sono ı, İ, ö, Ö, ç, Ç, ü, Ü, ğ, Ğ, ş, Ş. Puoi scrivere 12 regole per sostituire quelle con le loro controparti inglesi: 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
Questa sarebbe una mappatura da UTF a ASCII di qualche tipo? – LamonteCristo
Tutti i caratteri turchi saranno mappati su un solo carattere nell'intervallo di A-Z a-z? – LamonteCristo