使用Qt / C ++,我需要生成一个只包含ASCII字符子集的字符串:字母,数字,连字符,下划线,句点或冒号。
作为输入,我可以有任何东西。
所以我尝试应用一些规则:
使用Qt / C ++有没有简单的方法来应用第二和第三条规则?
由于
答案 0 :(得分:4)
是的,有办法。
首先,你应该对你的字符串进行unicode规范化
QString::normalized
。需要标准化以将变音符号与字母分开并用ascii等价物替换一些奇特的符号。 Here您可以阅读有关规范化表单的信息。
然后你可以使用可以用Latin-1编码的字符。可以测试 QChar的toLatin1方法。
char QChar :: toLatin1()const
返回与QChar相当的Latin-1字符,或0.这对非国际化软件非常有用。
...
QString testString = QString::fromUtf8("Ceñía-üÏÖ马克ñ");
QString normalized = testString.normalized(QString::NormalizationForm_KD);
QString result;
copy_if(normalized.begin(), normalized.end(), back_inserter(result), [](QChar& c) {
return c.toLatin1() != 0;
});
qDebug() << result; // Cenia-uIOn