Как не-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("");
Другие вопросы по тегам