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