string - 如何从Qt中的字符串中删除重音/变音符号?

标签 string qt diacritics qstring

如何从 Qt 中的字符串中删除变音符号。例如,这个:

QString test = QString::fromUtf8("éçàÖœ");
qDebug() << StringUtil::removeAccents(test);

应该输出:
ecaOoe

最佳答案

Qt 中没有直接的内置解决方案。一个简单的解决方案,应该在大多数情况下工作,是循环遍历字符串并用它们的等效项替换每个字符:

QString StringUtil::diacriticLetters_;
QStringList StringUtil::noDiacriticLetters_;

QString StringUtil::removeAccents(QString s) {
    if (diacriticLetters_.isEmpty()) {
        diacriticLetters_ = QString::fromUtf8("ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ");
        noDiacriticLetters_ << "S"<<"OE"<<"Z"<<"s"<<"oe"<<"z"<<"Y"<<"Y"<<"u"<<"A"<<"A"<<"A"<<"A"<<"A"<<"A"<<"AE"<<"C"<<"E"<<"E"<<"E"<<"E"<<"I"<<"I"<<"I"<<"I"<<"D"<<"N"<<"O"<<"O"<<"O"<<"O"<<"O"<<"O"<<"U"<<"U"<<"U"<<"U"<<"Y"<<"s"<<"a"<<"a"<<"a"<<"a"<<"a"<<"a"<<"ae"<<"c"<<"e"<<"e"<<"e"<<"e"<<"i"<<"i"<<"i"<<"i"<<"o"<<"n"<<"o"<<"o"<<"o"<<"o"<<"o"<<"o"<<"u"<<"u"<<"u"<<"u"<<"y"<<"y";
    }

    QString output = "";
    for (int i = 0; i < s.length(); i++) {
        QChar c = s[i];
        int dIndex = diacriticLetters_.indexOf(c);
        if (dIndex < 0) {
            output.append(c);
        } else {
            QString replacement = noDiacriticLetters_[dIndex];
            output.append(replacement);
        }
    }

    return output;
}

请注意 noDiacriticLetters_必须是 QStringList因为一些带有变音符号的字符可以匹配两个单个字符。例如 œ => oe

关于string - 如何从Qt中的字符串中删除重音/变音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009522/

相关文章:

java - 从 HTML 中提取数据并格式化输出

java - 替换和替换全部的区别

c++ - 进程启动前窗口不弹出 -> 尝试了 sleep() 方法,但是 "fails"

python - 使 QGraphicsItem 只能在一个图形 View 中选择

c# - 通过电子邮件发送带有长名称和重音的附件

在 C 中复制字符串

c - 字符串分词器的使用

用于提取 .zip 文件的 C++ 包装器代码?

python - 在 matplotlib 的保存的 pdf 图中,一些字符位于较低的位置

python将变音符号写入文件