Removendo acentos de um QString [duplicado]
Esta questão já tem uma resposta aqui:
Como remover acentos / sinais diacríticos de uma string no Qt? 4 respostasDesejo remover os acentos e, mais geralmente, as marcas diacríticas de uma string para iniciar uma pesquisa insensível ao sotaque. Com base em algumas leituras em classes de caracteres Unicode, descobri o seguinte:
QString unaccent(const QString s)
{
QString s2 = s.normalized(QString::NormalizationForm_D);
QString out;
for (int i=0,j=s2.length(); i<j; i++)
{
// strip diacritic marks
if (s2.at(i).category()!=QChar::Mark_NonSpacing &&
s2.at(i).category()!=QChar::Mark_SpacingCombining)
{
out.append(s2.at(i));
}
}
return out;
}
Parece funcionar razoavelmente bem para idiomas baseados no latim, mas eu estou querendo saber sobre sua adequação em outros alfabetos: árabe, cirílico, CJK ... que eu não posso testar devido à falta de compreensão cultural destes.
Especificamente, eu gostaria de saber:
Qual formulário de normalização Unicode é mais adequado para esse problema:NormalizationForm_KD
ouNormalizationForm_D
?É suficiente remover os caracteres pertencentes aMark_NonSpacing
eMark_SpacingCombining
categorias ou deve incluir mais categorias?Existem outras melhorias no código acima que o fariam o melhor possível para todos os idiomas?