Как можно распознавать символы, отличные от ASCII, в QString?

Я хочу определить, вводил ли пользователь символ не-ASCII (иначе некорректно известный как Unicode) (например, り) в диалоговом окне сохранения файла. Поскольку я использую Qt, любые символы, отличные от ASCII, должным образом сохраняются в QString, но я не могу понять, как определить, если какой-либо из символов в этой строке не является ASCII перед преобразованием строки в ASCII. Этот символ выше заканчивается тем, что записывается в файловую систему как ã‚Š.

Ответ 1

В моем понимании такой встроенной функции нет.

Около 1-2 лет назад я предлагал метод isAscii() для QString/QChar, чтобы обернуть низкоуровневую Unix isacii() и соответствующую функцию Windows, но он был отклонен. Вы могли бы написать тогда что-то вроде этого:

bool isUnicode = !myString.at(3).isAcii();

Я все еще думаю, что это было бы удобной функцией, если бы вы могли убедить сопровождающего. :-)

Боюсь, что кроме этого, вам придется самостоятельно проверять границы ascii. Вы можете сделать это самостоятельно следующим образом:

bool isUnicode = myChar.unicode() > 127; 

Подробности смотрите в документации:

ushort QChar :: unicode() const

Это перегруженная функция.

Ответ 2

Самый простой способ - проверить каждый код кода (QChar:: unicode()) ниже 128, если вам нужен чистый 7-битный ASCII.

Ответ 3

Чтобы записать его компактным способом без цикла, вы можете использовать регулярное выражение:

bool containsNonASCII = myString.contains(QRegularExpression(QStringLiteral("[^\\x{0000}-\\x{007F}]")));