gpt4 book ai didi

qt - 从 QString 中删除重音符号

转载 作者:行者123 更新时间:2023-12-03 05:56:30 30 4
gpt4 key购买 nike

我想从字符串中删除重音符号和更常见的变音符号,以启动不区分重音的搜索。基于对 Unicode 字符类的一些阅读,我想出了这个:

 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;
}

它似乎对于基于拉丁语的语言相当有效,但我想知道它是否适合其他字母:阿拉伯语、西里尔语、CJK...由于缺乏对这些字母的文化理解,我无法测试这些字母。

具体来说,我希望我知道:

  1. 哪种 Unicode 规范化形式更适合此问题:NormalizationForm_KDNormalizationForm_D
  2. 删除属于 Mark_NonSpacing 的字符是否足够和Mark_SpacingCombining类别还是应该包含更多类别?
  3. 是否对上述代码进行了其他改进,使其尽可能适用于所有语言?

最佳答案

QString unaccent(const QString s)
{
QString output(s.normalized(QString::NormalizationForm_D));
return output.replace(QRegExp("[^a-zA-Z\\s]"), "");
}

关于qt - 从 QString 中删除重音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12278448/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com