如何在QString中检测到非ASCII字符?

时间:2014-01-07 20:23:25

标签: c++ qt qstring qtcore qchar

我想检测用户是否在文件保存对话框中输入了非ASCII(否则错误地称为Unicode)字符(例如,り)。当我使用Qt时,任何非ASCII字符都正确保存在QString中,但我无法弄清楚在将字符串转换为ASCII之前如何确定该字符串中的任何字符是否为非ASCII。上面的那个字符最终会以ã‚Š的形式写入文件系统。

3 个答案:

答案 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}]")));