Как проверить, что QString кодируется в локальной 8-битной кодировке - PullRequest
0 голосов
/ 16 марта 2020

У меня есть QLineEdit, в котором я хочу ограничить ввод строками, которые можно безопасно кодировать в локальном 8-битном наборе символов системы. Мне удобно писать QValidator, но я не уверен, как я могу надежно обнаруживать не кодируемые символы и удалять их из ввода.

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

Такое ощущение, что я должен быть в состоянии собрать все эти части вместе, чтобы сделать то, что я хочу, но я просто не вижу способа сделать это.

...