我想检测用户是否在文件保存对话框中输入了非ASCII(否则错误地称为Unicode)字符(例如,り)。当我使用Qt时,任何非ASCII字符都正确保存在QString中,但我无法弄清楚在将字符串转换为ASCII之前如何确定该字符串中的任何字符是否为非ASCII。上面的那个字符最终会以ã‚Š
的形式写入文件系统。
答案 0 :(得分:9)
最简单的方法是,如果您需要纯粹的7位QChar::unicode(),请检查每个charachter的代码(ASCII)是否低于128。
答案 1 :(得分:6)
我的理解中没有这样的内置功能。</ p>
大约1 - 2年前,我提出了一个用于QString / QChar的isAscii()方法来包装低级Unix isacii()和相应的Windows函数,但它被拒绝了。你可以写下这样的东西:
bool isUnicode = !myString.at(3).isAcii();
如果你能说服维护者,我仍然认为这将是一个方便的功能。 : - )
除此之外,我担心你需要自己检查ascii边界。您可以按照以下方式自行完成:
bool isUnicode = myChar.unicode() > 127;
有关详细信息,请参阅文档:
ushort QChar::unicode () const
这是一个重载功能。
答案 2 :(得分:2)
要在没有循环的情况下以紧凑的方式编写它,您可以使用正则表达式:
bool containsNonASCII = myString.contains(QRegularExpression(QStringLiteral("[^\\x{0000}-\\x{007F}]")));