Я хочу определить, вводил ли пользователь не-ASCII (иначе неправильно известный как Unicode) символ (например, り) в диалоговом окне сохранения файла. Поскольку я использую Qt, все не-ASCII-символы должным образом сохраняются в QString, но я не могу понять, как определить, являются ли какие-либо символы в этой строке не-ASCII, прежде чем конвертировать строку в ASCII. Этот символ выше записывается в файловую систему как ã‚Š
,
В моем понимании такой встроенной функции нет.
Около 1-2 лет назад я предлагал метод isAscii () для QString / QChar, чтобы обернуть низкоуровневую Unix isacii () и соответствующую функцию Windows, но он был отклонен. Вы могли бы написать тогда что-то вроде этого:
bool isUnicode = !myString.at(3).isAcii();
Я все еще думаю, что это было бы удобной функцией, если бы вы могли убедить сопровождающего. 🙂
Боюсь, что кроме этого, вам придется самостоятельно проверять границы ascii. Вы можете сделать это самостоятельно следующим образом:
bool isUnicode = myChar.unicode() <= 127;
Подробности смотрите в документации:
ushort QChar :: unicode () const
Это перегруженная функция.
Самый простой способ — проверить код каждого персонажа (QChar :: юникода ()) быть ниже 128, если вам нужен чистый 7-битный ASCII.
Чтобы написать это компактно без цикла, вы можете использовать регулярное выражение:
bool containsNonASCII = myString.contains(QRegularExpression(QStringLiteral("[^\\x{0000}-\\x{007F}]")));