繁体   English   中英

将字符串中的所有非ASCII字符替换为其等效的ASCII

[英]Replace all non-ASCII characters in a string by their ASCII equivalent

使用Qt / C ++,我需要生成仅包含ASCII字符子集的字符串:字母,数字,连字符,下划线,句号或冒号。

作为输入,我可以有任何东西。

因此,我尝试应用一些规则:

  • 每个QChar :: isSpace都将由下划线替换
  • 每个非ASCII字母都将替换为等效的ASCII字母(例如:“é”将替换为“ e”)
  • 所有其他非ASCII字符将被删除

Qt / C ++是否有任何简单的方法可以应用第二条规则和第三条规则?

谢谢

是的,有办法。 首先,您应该使用QString::normalized对字符串进行unicode QString::normalized 需要规范化以将变音符号与字母分开,并用ascii等效项替换一些花哨的符号。 在这里您可以阅读有关标准化表格的信息。

然后,您可以获取可以用Latin-1编码的字符。 可以使用QChar的toLatin1方法进行测试。

char QChar :: toLatin1()常量

返回等效于QChar或0的Latin-1字符。这主要用于非国际化的软件。

...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM