我希望检测用户在文件保存对话框中输入的非ASCII字符(也被错误称为Unicode字符),例如, り。由于我正在使用Qt,任何非ASCII字符都会被正确地保存在QString中,但在将字符串转换为ASCII之前,我无法确定该字符串中的任何字符是否是非ASCII字符。上面的那个字符最终被写入文件系统为ã‚Š
。
我希望检测用户在文件保存对话框中输入的非ASCII字符(也被错误称为Unicode字符),例如, り。由于我正在使用Qt,任何非ASCII字符都会被正确地保存在QString中,但在将字符串转换为ASCII之前,我无法确定该字符串中的任何字符是否是非ASCII字符。上面的那个字符最终被写入文件系统为ã‚Š
。
据我所知,Qt中没有这样的内置功能。
大约1-2年前,我提出了一个isAscii()方法,为QString / QChar封装底层的Unix isacii()和相应的Windows函数,但被拒绝了。你可以像下面这样编写代码:
bool isUnicode = !myString.at(3).isAcii();
bool isUnicode = myChar.unicode() > 127;
详见文档:
(注:该函数返回字符的Unicode值,类型为unsigned short。)ushort QChar::unicode () const
这是一个重载函数。
为了不使用循环的紧凑方式编写代码,您可以使用正则表达式:
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("");