ASP.NET /C# Quando Å é igual a A? (e é igual a e)
-
07-07-2019 - |
Pergunta
Estou pagando países de um Alfabet, então os países iniciam o anúncio, eh etc., mas também quero listar Åbrohw no a e ëpollewop no e. Eu tentei string.startswith fornecendo uma opção StringCompare, mas não funciona ...
Estou correndo sob o código de cultura SV-SE, se isso importa ...
Michel
Solução
Ver Como removo os diacríticos (sotaques) de uma corda no .NET? Para a solução criar uma versão sem os diacríticos, que você pode usar para as comparações (enquanto ainda exibe a versão com os diacríticos).
Outras dicas
Ah, sim, a cultura é importante. Se você executar o seguinte:
List<string> letters = new List<string>() { "Å", "B", "A" };
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("sv-SE");
letters.Sort();
Console.WriteLine("sv-SE:")
letters.ForEach(s => Console.WriteLine(s));
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB");
letters.Sort();
Console.WriteLine("en-GB:")
letters.ForEach(s => Console.WriteLine(s));
... você obtém a seguinte saída:
sv-SE:
A
B
Å
en-GB:
A
Å
B
Tente usar a seleção de intervalo em vez de correspondência precisa.
A: (firstLetter <= A)
B: (firstLetter > A) AND (firstLetter <= B)
...
Você teria que dar uma cultura específica para classificar ou escrever seu próprio comparador para isso. Ordem de classificação padrão para sueco puts Å, ä, Ö no final.
Provavelmente, você gostaria de decompor letras com diacríticas e classificá -las como se não tivessem uma marca diacrítica.