如何在 QString 中检测非 ASCII 字符

How can non-ASCII characters be detected in a QString?

本文关键字:ASCII 字符 检测 QString      更新时间:2023-10-16

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