Spec-Zone.ru › Qt 5.15

Класс QTextCodec

Класс QTextCodec предоставляет преобразования между кодировками текста. Подробнее...

Заголовок: #include <QTextCodec>
qmake: QT += core
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Примечание: Все функции в этом классе являются повторно входящими.

  • setCodecForLocale(QTextCodec *c)
  • ~QTextCodec()

Примечание: Эти функции также являются безопасными для потоков:

  • codecForName(const QByteArray &name)
  • codecForMib(int mib)
  • availableCodecs()
  • availableMibs()
  • codecForLocale()

Типы публичного доступа

Структура ConverterState
Перечисление ConversionFlag { DefaultConversion, ConvertInvalidToNull, IgnoreHeader }
Флаги ConversionFlags

Функции публичного доступа

virtual QList<QByteArray> aliases() const
bool canEncode(QChar ch) const
bool canEncode(const QString &s) const
bool canEncode(QStringView s) const
QByteArray fromUnicode(const QString &str) const
QByteArray fromUnicode(QStringView str) const
QByteArray fromUnicode(const QChar *input, int number, QTextCodec::ConverterState *state = nullptr) const
QTextDecoder * makeDecoder(QTextCodec::ConversionFlags flags = DefaultConversion) const
QTextEncoder * makeEncoder(QTextCodec::ConversionFlags flags = DefaultConversion) const
virtual int mibEnum() const = 0
virtual QByteArray name() const = 0
QString toUnicode(const QByteArray &a) const
QString toUnicode(const char *chars) const
QString toUnicode(const char *input, int size, QTextCodec::ConverterState *state = nullptr) const

Статические члены публичного доступа

QList<QByteArray> availableCodecs()
QList<int> availableMibs()
QTextCodec * codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
QTextCodec * codecForHtml(const QByteArray &ba)
QTextCodec * codecForLocale()
QTextCodec * codecForMib(int mib)
QTextCodec * codecForName(const QByteArray &name)
QTextCodec * codecForName(const char *name)
QTextCodec * codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)
QTextCodec * codecForUtfText(const QByteArray &ba)
void setCodecForLocale(QTextCodec *c)

Защищенные функции

QTextCodec()
virtual ~QTextCodec()
virtual QByteArray convertFromUnicode(const QChar *input, int number, QTextCodec::ConverterState *state) const = 0
virtual QString convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state) const = 0

Подробное описание

Qt использует Unicode для хранения, отображения и обработки строк. В многих ситуациях вам может потребоваться работать с данными, использующими другую кодировку. Например, большинство японских документов по-прежнему хранятся в кодировках Shift-JIS или ISO 2022-JP, в то время как российские пользователи часто имеют свои документы в кодировках KOI8-R или Windows-1251.

Qt предоставляет набор классов QTextCodec для преобразования форматов, отличных от Unicode, в Unicode и обратно. Вы также можете создавать свои собственные классы кодировок.

Поддерживаемые кодировки:

  • Big5
  • Big5-HKSCS
  • CP949
  • EUC-JP
  • EUC-KR
  • GB18030
  • HP-ROMAN8
  • IBM 850
  • IBM 866
  • IBM 874
  • ISO 2022-JP
  • ISO 8859-1 to 10
  • ISO 8859-13 to 16
  • Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg и Tml
  • KOI8-R
  • KOI8-U
  • Macintosh
  • Shift-JIS
  • TIS-620
  • TSCII
  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • Windows-1250 до 1258

Если Qt скомпилирован с поддержкой ICU, то большинство кодировок, поддерживаемых ICU, также будут доступны приложению.

QTextCodec можно использовать следующим образом для преобразования строки в локальной кодировке в Unicode. Предположим, у вас есть строка, закодированная в русской кодировке KOI8-R, и вы хотите преобразовать её в Unicode. Простой способ сделать это:

QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);

После этого, string содержит текст, преобразованный в Unicode. Преобразование строки из Unicode в локальную кодировку также просто:

QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);

Чтобы читать или записывать файлы в различных кодировках, используйте QTextStream и его функцию setCodec(). См. пример Кодировки для применения QTextCodec к вводу-выводу файлов.

Необходимо соблюдать осторожность при попытке преобразования данных частями, например, при их получении по сети. В таких случаях возможно, что многобайтовый символ будет разделен между двумя частями. В лучшем случае это может привести к потере символа, а в худшем — к сбою всего преобразования.

В таких ситуациях нужно создать объект QTextDecoder для кодировки и использовать этот QTextDecoder для всего процесса декодирования, как показано ниже:

QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
QTextDecoder *decoder = codec->makeDecoder();

QString string;
while (new_data_available()) {
    QByteArray chunk = get_new_data();
    string += decoder->toUnicode(chunk);
}
delete decoder;

Объект QTextDecoder сохраняет состояние между частями и, следовательно, работает правильно, даже если многобайтовый символ разделен между частями.

Создание собственного класса кодировки

Поддержка новых кодировок текста может быть добавлена в Qt путём создания подклассов QTextCodec.

Чистые виртуальные функции описывают кодировщик системе, и кодировщик используется по мере необходимости в различных форматах текстовых файлов, поддерживаемых QTextStream, и в X11 для локально-зависимого ввода-вывода символов.

Для добавления поддержки другой кодировки в Qt создайте подкласс QTextCodec и реализуйте функции, указанные в таблице ниже.

END_OF_DOCUMENT_MARKER
Функция Описание
name() Возвращает официальное имя кодировки. Если кодировка указана в файле кодировок IANA файле кодировок IANA, имя должно быть предпочтительным именем MIME для кодировки.
aliases() Возвращает список альтернативных имен кодировки. QTextCodec предоставляет реализацию по умолчанию, которая возвращает пустой список. Например, "ISO-8859-1" имеет псевдонимы "latin1", "CP819", "IBM819" и "iso-ir-100".
mibEnum() Возвращает значение MIB для кодировки, если оно указано в файле кодировок IANA.
convertToUnicode() Преобразует строку 8-битовых символов в Unicode.
convertFromUnicode() Преобразует строку Unicode в строку 8-битовых символов.

См. также QTextStream, QTextDecoder, QTextEncoder и Пример кодировок текста.

Документация по типам членов

enum QTextCodec::ConversionFlagфлаги QTextCodec::ConversionFlags

Константа Значение Описание
QTextCodec::DefaultConversion 0 Флаги не установлены.
QTextCodec::ConvertInvalidToNull 0x80000000 Если этот флаг установлен, каждый недопустимый входной символ выводится как нулевой символ.
QTextCodec::IgnoreHeader 0x1 Игнорировать метку порядка байтов Unicode и не генерировать её.

Тип ConversionFlags является псевдонимом для QFlags<ConversionFlag>. Он хранит логическое ИЛИ комбинацию значений ConversionFlag.

Документация по документации функций-членов

[protected] QTextCodec::QTextCodec()

Создаёт QTextCodec с наивысшим приоритетом. QTextCodec всегда должен создаваться в куче (т.е. с new). Qt принимает владение и удалит его при завершении приложения.

[virtual protected] QTextCodec::~QTextCodec()

Уничтожает QTextCodec. Обратите внимание, что вы не должны удалять кодеки самостоятельно: после создания они становятся ответственностью Qt.

Предупреждение: Эта функция не реентерабельна.

[virtual] QList<QByteArray> QTextCodec::aliases() const

Подклассы могут возвращать список псевдонимов для кодека.

Стандартные псевдонимы для кодеков можно найти в файле кодировок IANA.

[static] QList<QByteArray> QTextCodec::availableCodecs()

Возвращает список всех доступных кодеков по имени. Используйте QTextCodec::codecForName(), чтобы получить QTextCodec по имени.

Список может содержать много упоминаний одного и того же кодека, если у кодека есть псевдонимы.

Примечание: Эта функция безопасна для использования в нескольких потоках.

См. также availableMibs(), name() и aliases().

[static] QList<int> QTextCodec::availableMibs()

Возвращает список MIB для всех доступных кодеков. Используйте QTextCodec::codecForMib(), чтобы получить QTextCodec для MIB.

Примечание: Эта функция безопасна для использования в нескольких потоках.

См. также availableCodecs() и mibEnum().

bool QTextCodec::canEncode(QChar ch) const

Возвращает true , если символ Unicode ch можно полностью закодировать с помощью этого кодека; в противном случае возвращает false.

bool QTextCodec::canEncode(const QString &s) const

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

s содержит проверяемую строку на возможность кодирования.

bool QTextCodec::canEncode(QStringView s) const

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

Возвращает true , если строку Unicode s можно полностью закодировать с помощью этого кодека; в противном случае возвращает false.

Эта функция была добавлена в Qt 5.10.

[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)

Пытается определить кодировку предоставленного фрагмента HTML в заданном массиве байтов ba, проверив BOM (метку порядка байтов) и заголовок метаданных content-type, и возвращает экземпляр QTextCodec, способный декодировать html в unicode. Если кодек не может быть определён по предоставленным данным, возвращается defaultCodec.

Эта функция была добавлена в Qt 4.4.

См. также codecForUtfText().

[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)

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

Пытается определить кодировку предоставленного фрагмента HTML в заданном массиве байтов ba, проверив BOM (метку порядка байтов) и заголовок метаданных content-type, и возвращает экземпляр QTextCodec, способный декодировать html в unicode. Если кодек не может быть определён, эта перегрузка возвращает Latin-1 QTextCodec.

[static] QTextCodec *QTextCodec::codecForLocale()

Возвращает указатель на кодек, наиболее подходящий для данной локали.

Кодек будет получен из ICU, если используется этот бэкэнд, в противном случае он может быть получен из ОС-специфического API. В последнем случае имя кодека может быть "System".

Примечание: Эта функция безопасна для использования в нескольких потоках.

См. также setCodecForLocale().

[static] QTextCodec *QTextCodec::codecForMib(int mib)

Возвращает QTextCodec, соответствующий MIBenum mib.

Примечание: Эта функция безопасна для использования в нескольких потоках.

[static] QTextCodec *QTextCodec::codecForName(const QByteArray &name)

Ищет все установленные объекты QTextCodec и возвращает тот, который лучше всего соответствует name; соответствие не учитывает регистр. Возвращает 0, если не был найден кодек, соответствующий имени name.

Примечание: Эта функция безопасна для использования в нескольких потоках.

[static] QTextCodec *QTextCodec::codecForName(const char *name)

Ищет все установленные объекты QTextCodec и возвращает тот, который лучше всего соответствует name; соответствие не учитывает регистр. Возвращает 0, если не был найден кодек, соответствующий имени name.

[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)

Пытается определить кодировку предоставленного фрагмента ba, используя BOM (метку порядка байтов), и возвращает экземпляр QTextCodec, способный декодировать текст в unicode. Эта функция может определить один из следующих кодеков:

  • UTF-32 Little Endian
  • UTF-32 Big Endian
  • UTF-16 Little Endian
  • UTF-16 Big Endian
  • UTF-8

Если кодек не может быть определён по предоставленным данным, возвращается defaultCodec.

Эта функция была добавлена в Qt 4.6.

См. также codecForHtml().

[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)

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

Пытается определить кодировку предоставленного фрагмента ba, используя BOM (метку порядка байтов), и возвращает экземпляр QTextCodec, способный декодировать текст в unicode. Эта функция может определить один из следующих кодеков:

  • UTF-32 Little Endian
  • UTF-32 Big Endian
  • UTF-16 Little Endian
  • UTF-16 Big Endian
  • UTF-8

Если кодек не может быть определён по предоставленным данным, эта перегрузка возвращает Latin-1 QTextCodec.

См. также codecForHtml().

END_OF_DOCUMENT_MARKER

[pure virtual protected] QByteArray QTextCodec::convertFromUnicode(const QChar *input, int number, QTextCodec::ConverterState *state) const

Подклассы QTextCodec должны переопределять эту функцию.

Преобразует первые number символов из массива input из Юникода в кодировку подкласса и возвращает результат в QByteArray.

state может быть nullptr, в этом случае преобразование является бессостоятельным и должны использоваться правила преобразования по умолчанию. Если state не равен 0, кодек должен сохранить состояние после преобразования в state и скорректировать члены структуры remainingChars и invalidChars.

[pure virtual protected] QString QTextCodec::convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state) const

Подклассы QTextCodec должны переопределять эту функцию.

Преобразует первые len символов из chars из кодировки подкласса в Юникод и возвращает результат в QString.

state может быть nullptr, в этом случае преобразование является бессостоятельным и должны использоваться правила преобразования по умолчанию. Если state не равен 0, кодек должен сохранить состояние после преобразования в state и скорректировать члены структуры remainingChars и invalidChars.

QByteArray QTextCodec::fromUnicode(const QString &str) const

Преобразует str из Юникода в кодировку этого кодека и возвращает результат в QByteArray.

QByteArray QTextCodec::fromUnicode(QStringView str) const

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

Преобразует str из Юникода в кодировку этого кодека и возвращает результат в QByteArray.

Эта функция была введена в Qt 5.10.

QByteArray QTextCodec::fromUnicode(const QChar *input, int number, QTextCodec::ConverterState *state = nullptr) const

Преобразует первые number символов из массива input из Юникода в кодировку этого кодека и возвращает результат в QByteArray.

Состояние используемого преобразователя обновляется.

QTextDecoder *QTextCodec::makeDecoder(QTextCodec::ConversionFlags flags = DefaultConversion) const

Создаёт QTextDecoder со специфицированными flags для декодирования кусков char * данных, чтобы создать куски данных Юникода.

Вызывающий объект отвечает за удаление возвращённого объекта.

Эта функция была введена в Qt 4.7.

QTextEncoder *QTextCodec::makeEncoder(QTextCodec::ConversionFlags flags = DefaultConversion) const

Создаёт QTextEncoder со специфицированными flags для кодирования кусков данных Юникода в виде char * данных.

Вызывающий объект отвечает за удаление возвращённого объекта.

Эта функция была введена в Qt 4.7.

[pure virtual] int QTextCodec::mibEnum() const

Подклассы QTextCodec должны переопределять эту функцию. Она возвращает MIBenum (см. файл кодировок наборов символов IANA для получения дополнительной информации). Важно, чтобы каждый подкласс QTextCodec возвращал правильное уникальное значение для этой функции.

[pure virtual] QByteArray QTextCodec::name() const

Подклассы QTextCodec должны переопределять эту функцию. Она возвращает имя кодировки, поддерживаемой подклассом.

Если кодек зарегистрирован как набор символов в файле кодировок наборов символов IANA, этот метод должен возвращать предпочтительное имя MIME для кодека, если оно определено, в противном случае — его имя.

[static] void QTextCodec::setCodecForLocale(QTextCodec *c)

Устанавливает кодек в c; это будет возвращено функцией codecForLocale(). Если c равно nullptr, кодек сбрасывается до значения по умолчанию.

Это может потребоваться для некоторых приложений, которые хотят использовать свой собственный механизм для установки локали.

Предупреждение: Эта функция не многопоточна.

См. также codecForLocale().

QString QTextCodec::toUnicode(const QByteArray &a) const

Преобразует a из кодировки этого кодека в Юникод и возвращает результат в QString.

QString QTextCodec::toUnicode(const char *chars) const

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

chars содержит исходные символы.

QString QTextCodec::toUnicode(const char *input, int size, QTextCodec::ConverterState *state = nullptr) const

Преобразует первые size символов из input из кодировки этого кодека в Юникод и возвращает результат в QString.

Состояние используемого преобразователя обновляется.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qtextcodec.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API