我想检测用户是否在文件保存对话框中输入了非 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("");