Spec-Zone.ru › Qt 5.12

Класс 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) const
QTextEncoder * makeEncoder(QTextCodec::ConversionFlags flags) 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

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

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

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 to 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 и реализуйте функции, перечисленные в таблице ниже.

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

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

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

enum QTextCodec::ConversionFlagflags 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 IANA character-sets encoding file.

[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 (метку порядка байтов) и заголовок мета-типа содержимого, и возвращает экземпляр QTextCodec, способный декодировать HTML в Unicode. Если кодек не может быть определён из предоставленного содержимого, возвращается defaultCodec.

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

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

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

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

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

[static] QTextCodec *QTextCodec::codecForLocale()

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

В Windows кодек будет основан на системном регионоспособном наборе. На системах Unix кодек может использовать библиотеку iconv, если встроенный кодек для региона не найден.

Обратите внимание, что в этих случаях имя кодека будет «System».

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

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

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

Возвращает QTextCodec, соответствующий значению перечисления MIB 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().

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

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

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

state может быть 0, в этом случае преобразование является бессостоятельным и используются правила преобразования по умолчанию. Если 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 может быть 0, в этом случае преобразование является бессостоятельным и используются правила преобразования по умолчанию. Если 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.

Состояние конвертера state обновляется.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также 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.

Состояние конвертера state обновляется.

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

Spec-Zone.ru

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