如何在 QString 中检测非 ASCII 字符
How can non-ASCII characters be detected in a QString?
我想检测用户是否在文件保存对话框中输入了非 ASCII(否则错误地称为 Unicode)字符(例如 り)。当我使用 Qt 时,任何非 ASCII 字符都正确保存在 QString 中,但在将字符串转换为 ASCII 之前,我无法弄清楚如何确定该字符串中的任何字符是否为非 ASCII。上面的字符最终会作为ã‚Š
写入文件系统。
在我的理解中没有这样的内置功能。
大约 1-2 年前,我为 QString/QChar 提出了一个 isAscii() 方法来包装低级 Unix isacii() 和相应的 Windows 函数,但被拒绝了。你可以这样写:
bool isUnicode = !myString.at(3).isAcii();
我仍然认为这将是一个方便的功能,如果你能说服维护者。
除此之外,恐怕你需要自己检查ascii边界。您可以按如下方式自行执行此操作:
bool isUnicode = myChar.unicode() > 127;
有关详细信息,请参阅文档:
ushort QChar::unicode () const
这是一个重载函数。
最简单的方法是检查每个字符的代码(QChar::unicode())是否低于128,如果你需要纯7位ASCII。
要以紧凑的方式编写它而不带循环,您可以使用正则表达式:
bool containsNonASCII = myString.contains(QRegularExpression(QStringLiteral("[^\x{0000}-\x{007F}]")));
这对
我有用:isLetterOrNumber()
ot_id += QChar((short) b.to_ulong()).isLetterOrNumber() ? QChar((short) b.to_ulong()) : QString("");
相关文章:
- RE2 不匹配非 ASCII 字符
- 打印从 0 到 255 的所有 ASCII 字符
- C++ 电话号码字母拨号程序 - 语法错别字?还是非 ASCII 字符?
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- Cin 和 getline 无法正确保存非 ascii 字符
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 非ASCII字符的词典排序
- 将char类型指定给int以打印相应的ASCII字符
- 将非 ASCII 字符转换为英语对应字符C++
- 在 C++ 中从 8 位 ASCII 字符创建 7 位 ASCII 文本字符串
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 如何遍历所有 ASCII 字符?
- 在控制台中以C++打印(并存储)高 ASCII 字符 (╔)
- Qt:文件名中的非 ASCII 字符替换为"?"
- ASCII字符时的意外终结
- C 17是否允许非ASCII字符作为标识符
- QML 映像不会在映像源中加载具有非 ASCII 字符的图像
- MFC Cedit将非ASCII字符转换为ASCII
- 如何与C 字符串中的非ASCII字符一起工作
- 使用 c++ 是否可以将 ASCII 字符转换为十六进制?