У меня есть QLineEdit
, в котором я хочу ограничить ввод строками, которые можно безопасно кодировать в локальном 8-битном наборе символов системы. Мне удобно писать QValidator
, но я не уверен, как я могу надежно обнаруживать не кодируемые символы и удалять их из ввода.
QTextCodec::codecForLocale()->canEncode(const QString &)
должен сказать мне, является ли ввод кодируемым, но не помогает мне убрать оскорбительных персонажей. - Пройдя по вводу символ за раз с
QTextCodec::codecForLocale()->canEncode(QChar)
, не похоже, что он будет работать для суррогатных пар на входе. QString::toLocal8Bit()
утверждает, что его результат не определен, если ввод содержит некодируемые символы. QTextCodec::codecForLocale()->fromUnicode()
имеет перегрузку, которая принимает указатель QTextCodec::ConverterState
, что может показаться полезным, но кажется, что это непрозрачная структура.
Такое ощущение, что я должен быть в состоянии собрать все эти части вместе, чтобы сделать то, что я хочу, но я просто не вижу способа сделать это.