Я хочу определить, вводил ли пользователь символ не-ASCII (иначе некорректно известный как Unicode) (например, り) в диалоговом окне сохранения файла. Поскольку я использую Qt, любые символы, отличные от ASCII, должным образом сохраняются в QString, но я не могу понять, как определить, если какой-либо из символов в этой строке не является ASCII перед преобразованием строки в ASCII. Этот символ выше заканчивается тем, что записывается в файловую систему как ã‚Š
.
Как можно распознавать символы, отличные от ASCII, в QString?
Ответ 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}]")));