将字符串中的所有非 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++有什么简单的方法来应用第二条和第三条规则吗?
谢谢
是的,有办法。首先,您应该对字符串进行 unicode 规范化 QString::normalized
.需要规范化以将变音符号与字母分开,并将一些花哨的符号替换为 ascii 等效符号。在这里,您可以阅读有关规范化表单的信息。
然后,您可以获取可以用拉丁语-1编码的字符。可以测试到拉丁语1方法的QChar。
char QChar::toLatin1() const
返回与 QChar 等效的拉丁语 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
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- Qt:文件名中的非 ASCII 字符替换为"?"
- 如何在C++中读取带有ifstream的替换字符?(ASCII 中的 SUB)
- 将字符串中的所有非 ASCII 字符替换为其等效的 ASCII
- C++-用非ascii字符替换文件中的特殊字符
- c++和UTF8 -为什么不直接替换ASCII
- 如何在c++中比较/替换数组中的非ascii字符
- 在 c++ 中将一个 ascii 字符的所有实例替换为另一个实例