Как можно обнаружить не-ASCII символы в QString?

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

9

Решение

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

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

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

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

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

bool isUnicode = myChar.unicode() <= 127;

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

ushort QChar :: unicode () const

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

6

Другие решения

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

8

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

bool containsNonASCII = myString.contains(QRegularExpression(QStringLiteral("[^\\x{0000}-\\x{007F}]")));
2
По вопросам рекламы [email protected]