gpt4 book ai didi

c++ - 用 ASCII 等效字符替换字符串中的所有非 ASCII 字符

转载 作者:行者123 更新时间:2023-11-30 01:43:33 31 4
gpt4 key购买 nike

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

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

所以我尝试应用一些规则:

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

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

谢谢

最佳答案

是的,有办法。首先你应该对你的字符串进行unicode规范化QString::规范化。需要规范化来将变音符号与字母分开,并将一些花哨的符号替换为 ascii 等效符号。 Here您可以阅读规范化表格。

然后你可以使用可以用 Latin-1 编码的字符。可以测试 toLatin1 QChar的方法。

char QChar::toLatin1() const

Returns the Latin-1 character equivalent to the QChar, or 0. This is mainly useful for non-internationalized software.

...

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

关于c++ - 用 ASCII 等效字符替换字符串中的所有非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484271/

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