QTextCodec Class
La clase QTextCodec proporciona conversiones entre codificaciones de texto. Más...
| Cabecera: | #include <QTextCodec> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat)target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake: | QT += core5compat |
Nota: Todas las funciones de esta clase son reentrantes.
- setCodecForLocale(QTextCodec *c)
- ~QTextCodec()
Nota: Estas funciones también son thread-safe:
- codecForName(const QByteArray &name)
- codecForMib(int mib)
- availableCodecs()
- availableMibs()
- codecForLocale()
Funciones públicas
| virtual QList<QByteArray> | aliases() const |
| bool | canEncode(QChar ch) const |
| bool | canEncode(QStringView s) const |
| bool | canEncode(const QString &s) const |
| QByteArray | fromUnicode(const QString &str) const |
| QByteArray | fromUnicode(const QChar *input, int number, int *state = nullptr) const |
| QByteArray | fromUnicode(QStringView str) const |
| QTextDecoder * | makeDecoder(int flags = DefaultConversion) const |
| QTextEncoder * | makeEncoder(int flags = DefaultConversion) const |
| virtual int | mibEnum() const = 0 |
| virtual QByteArray | name() const = 0 |
| QString | toUnicode(const QByteArray &a) const |
| QString | toUnicode(const char *input, int size, int *state = nullptr) const |
| QString | toUnicode(const char *chars) const |
Miembros públicos estáticos
| 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) |
Funciones protegidas
| QTextCodec() | |
| virtual | ~QTextCodec() |
| virtual QByteArray | convertFromUnicode(const QChar *input, int number, int *state) const = 0 |
| virtual QString | convertToUnicode(const char *chars, int len, int *state) const = 0 |
Descripción Detallada
Qt utiliza Unicode para almacenar, dibujar y manipular cadenas. En muchas situaciones es posible que desee tratar con datos que utilizan una codificación diferente. Por ejemplo, la mayoría de los documentos japoneses todavía se almacenan en Shift-JIS o ISO 2022-JP, mientras que los usuarios rusos a menudo tienen sus documentos en KOI8-R o Windows-1251.
Qt proporciona un conjunto de clases QTextCodec para ayudar a convertir formatos no Unicode a y desde Unicode. También puedes crear tus propias clases codec.
Las codificaciones soportadas son:
- Big5
- Big5-HKSCS
- CP949
- EUC-JP
- EUC-KR
- GB18030
- HP-ROMAN8
- IBM 850
- IBM 866
- IBM 874
- ISO 2022-JP
- ISO 8859-1 a 10
- ISO 8859-13 a 16
- Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg y 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 a 1258
Si Qt se compila con el soporte ICU activado, la mayoría de los codecs soportados por ICU también estarán disponibles para la aplicación.
QTextCodecs se puede utilizar de la siguiente manera para convertir alguna cadena codificada localmente a Unicode. Suponga que tiene alguna cadena codificada en la codificación rusa KOI8-R, y quiere convertirla a Unicode. La forma más sencilla de hacerlo es la siguiente:
QByteArray encodedString = "..."; QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QString string = codec->toUnicode(encodedString);
Después de esto, string contiene el texto convertido a Unicode. Convertir una cadena de Unicode a la codificación local es igual de fácil:
QString string = "..."; QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QByteArray encodedString = codec->fromUnicode(string);
Hay que tener cierto cuidado al intentar convertir los datos en trozos, por ejemplo, al recibirlos a través de una red. En estos casos, es posible que un carácter multibyte se divida en dos trozos. En el mejor de los casos, esto puede provocar la pérdida de un carácter y, en el peor, el fallo de toda la conversión.
En estos casos, lo mejor es crear un objeto QTextDecoder para el códec y utilizar este objeto QTextDecoder para todo el proceso de descodificación, como se muestra a continuación:
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;
El objeto QTextDecoder mantiene el estado entre trozos y por lo tanto funciona correctamente incluso si un carácter multibyte se divide entre trozos.
Creación de su propia clase de códec
Se puede añadir soporte para nuevas codificaciones de texto a Qt creando subclases de QTextCodec.
Las funciones virtuales puras describen el codificador al sistema y el codificador se utiliza según se requiera en los diferentes formatos de archivos de texto soportados por QTextStream, y bajo X11, para la entrada y salida de caracteres específicos de la localización.
Para añadir soporte para otra codificación a Qt, haz una subclase de QTextCodec e implementa las funciones listadas en la siguiente tabla.
| Función | Descripción |
|---|---|
| name() | Devuelve el nombre oficial de la codificación. Si la codificación está listada en el archivo IANA character-sets encoding, el nombre debería ser el nombre MIME preferido para la codificación. |
| aliases() | Devuelve una lista de nombres alternativos para la codificación. QTextCodec proporciona una implementación por defecto que devuelve una lista vacía. Por ejemplo, "ISO-8859-1" tiene como alias "latin1", "CP819", "IBM819" e "iso-ir-100". |
| mibEnum() | Devuelve el enum MIB para la codificación si está listada en el archivo de codificación de juegos de caracteres de IANA. |
| convertToUnicode() | Convierte una cadena de caracteres de 8 bits a Unicode. |
| convertFromUnicode() | Convierte una cadena Unicode a una cadena de caracteres de 8 bits. |
Véase también QTextStream, QTextDecoder, y QTextEncoder.
Documentación de las funciones miembro
[protected] QTextCodec::QTextCodec()
Construye un QTextCodec, y le da la precedencia más alta. El QTextCodec debe construirse siempre en el montón (es decir, con new). Qt toma la propiedad y lo borrará cuando la aplicación termine.
[virtual noexcept protected] QTextCodec::~QTextCodec()
Destruye el QTextCodec. Tenga en cuenta que no debe borrar los códecs usted mismo: una vez creados pasan a ser responsabilidad de Qt.
Advertencia: Esta función no es reentrante.
[virtual] QList<QByteArray> QTextCodec::aliases() const
Las subclases pueden devolver una serie de alias para el códec en cuestión.
Los alias estándar para códecs se pueden encontrar en el archivo de codificación de conjuntos de caracteres de IANA.
[static] QList<QByteArray> QTextCodec::availableCodecs()
Devuelve la lista de todos los códecs disponibles, por nombre. Llame a QTextCodec::codecForName() para obtener el QTextCodec del nombre.
La lista puede contener muchas menciones del mismo códec si éste tiene alias.
Nota: Esta función es thread-safe.
Véase también availableMibs(), name() y aliases().
[static] QList<int> QTextCodec::availableMibs()
Devuelve la lista de MIBs para todos los codecs disponibles. Llame a QTextCodec::codecForMib() para obtener el QTextCodec para el MIB.
Nota: Esta función es thread-safe.
Véase también availableCodecs() y mibEnum().
bool QTextCodec::canEncode(QChar ch) const
Devuelve true si el carácter Unicode ch puede codificarse completamente con este códec; en caso contrario, devuelve false.
bool QTextCodec::canEncode(QStringView s) const
Devuelve true si la cadena Unicode s puede codificarse completamente con este códec; en caso contrario devuelve false.
Se trata de una función sobrecargada.
bool QTextCodec::canEncode(const QString &s) const
s contiene la cadena cuya codificación se comprueba.
Se trata de una función sobrecargada.
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
Intenta detectar la codificación del fragmento de HTML proporcionado en la matriz de bytes dada, ba, comprobando la BOM (marca de orden de bytes) y la cabecera meta content-type y devuelve una instancia de QTextCodec capaz de descodificar el html a unicode. Si no se puede detectar el códec a partir del contenido proporcionado, se devuelve defaultCodec.
Véase también codecForUtfText().
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)
Intenta detectar la codificación del fragmento de HTML proporcionado en la matriz de bytes dada, ba, comprobando la BOM (marca de orden de bytes) y la cabecera meta content-type y devuelve una instancia QTextCodec capaz de descodificar el html a unicode. Si no se puede detectar el códec, esta sobrecarga devuelve un Latin-1 QTextCodec.
Se trata de una función sobrecargada.
[static] QTextCodec *QTextCodec::codecForLocale()
Devuelve un puntero al códec más adecuado para esta configuración regional.
El códec se recuperará de ICU cuando se utilice ese backend; de lo contrario, puede obtenerse de una API específica del sistema operativo. En este último caso, el nombre del códec puede ser "System".
Nota: Esta función es thread-safe.
Véase también setCodecForLocale().
[static] QTextCodec *QTextCodec::codecForMib(int mib)
Devuelve el QTextCodec que coincide con el MIBenum mib .
Nota: Esta función es thread-safe.
[static] QTextCodec *QTextCodec::codecForName(const QByteArray &name)
Busca todos los objetos QTextCodec instalados y devuelve el que mejor coincida con name; la coincidencia no distingue entre mayúsculas y minúsculas. Devuelve nullptr si no se encuentra ningún códec que coincida con el nombre name.
Nota: Esta función es thread-safe.
[static] QTextCodec *QTextCodec::codecForName(const char *name)
Busca todos los objetos QTextCodec instalados y devuelve el que mejor coincida con name; la coincidencia no distingue entre mayúsculas y minúsculas. Devuelve nullptr si no se ha encontrado ningún códec que coincida con el nombre name.
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)
Intenta detectar la codificación del fragmento proporcionado ba utilizando la BOM (Byte Order Mark) y devuelve una instancia de QTextCodec capaz de descodificar el texto a unicode. Esta función puede detectar uno de los siguientes códecs:
- UTF-32 Little Endian
- UTF-32 Big Endian
- UTF-16 Little Endian
- UTF-16 Big Endian
- UTF-8
Si no se puede detectar el códec a partir del contenido proporcionado, se devuelve defaultCodec.
Véase también codecForHtml().
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)
Intenta detectar la codificación del fragmento proporcionado ba utilizando la BOM (Byte Order Mark) y devuelve una instancia de QTextCodec capaz de descodificar el texto a unicode. Esta función puede detectar uno de los siguientes códecs:
- UTF-32 Little Endian
- UTF-32 Big Endian
- UTF-16 Little Endian
- UTF-16 Big Endian
- UTF-8
Si no se puede detectar el códec a partir del contenido proporcionado, esta sobrecarga devuelve un Latin-1 QTextCodec.
Se trata de una función sobrecargada.
Véase también codecForHtml().
[pure virtual protected] QByteArray QTextCodec::convertFromUnicode(const QChar *input, int number, int *state) const
QTextCodec Las subclases deben reimplementar esta función.
Convierte el primer number de caracteres de la matriz input de Unicode a la codificación de la subclase, y devuelve el resultado en un QByteArray.
state puede ser nullptr, en cuyo caso la conversión no tiene estado y deben utilizarse las reglas de conversión predeterminadas. Si state no es nullptr, el códec debe guardar el estado tras la conversión en state, y ajustar los miembros remainingChars y invalidChars de la estructura.
[pure virtual protected] QString QTextCodec::convertToUnicode(const char *chars, int len, int *state) const
QTextCodec Las subclases deben reimplementar esta función.
Convierte los primeros len caracteres de chars de la codificación de la subclase a Unicode, y devuelve el resultado en un QString.
state puede ser nullptr, en cuyo caso la conversión es apátrida y deben utilizarse las reglas de conversión por defecto. Si state no es nullptr, el códec debe guardar el estado tras la conversión en state, y ajustar los miembros remainingChars y invalidChars de la estructura.
QByteArray QTextCodec::fromUnicode(const QString &str) const
Convierte str de Unicode a la codificación de este códec, y devuelve el resultado en un QByteArray.
QByteArray QTextCodec::fromUnicode(const QChar *input, int number, int *state = nullptr) const
Convierte el primer number de caracteres de la matriz input de Unicode a la codificación de este códec, y devuelve el resultado en un QByteArray.
Se actualiza el state del convertidor utilizado.
QByteArray QTextCodec::fromUnicode(QStringView str) const
Convierte str de Unicode a la codificación de este códec y devuelve el resultado en QByteArray.
Se trata de una función sobrecargada.
QTextDecoder *QTextCodec::makeDecoder(int flags = DefaultConversion) const
Crea un QTextDecoder con un flags especificado para descodificar trozos de datos char * para crear trozos de datos Unicode.
La persona que llama es responsable de eliminar el objeto devuelto.
QTextEncoder *QTextCodec::makeEncoder(int flags = DefaultConversion) const
Crea un QTextEncoder con un flags especificado para codificar trozos de datos Unicode como datos char *.
La persona que llama es responsable de eliminar el objeto devuelto.
[pure virtual] int QTextCodec::mibEnum() const
Las subclases de QTextCodec deben reimplementar esta función. Devuelve el MIBenum (consulte el archivo de codificación de conjuntos de caracteres de IANA para obtener más información). Es importante que cada subclase de QTextCodec devuelva el valor único correcto para esta función.
[pure virtual] QByteArray QTextCodec::name() const
QTextCodec Las subclases deben reimplementar esta función. Devuelve el nombre de la codificación soportada por la subclase.
Si el códec está registrado como un conjunto de caracteres en el archivo de codificación de conjuntos de caracteres de la IANA, este método debería devolver el nombre mime preferido para el códec si está definido; en caso contrario, su nombre.
[static] void QTextCodec::setCodecForLocale(QTextCodec *c)
Establece el códec en c; éste será devuelto por codecForLocale(). Si c es nullptr, el códec se restablece al predeterminado.
Esto puede ser necesario para algunas aplicaciones que deseen utilizar su propio mecanismo para establecer la configuración regional.
Advertencia: Esta función no es reentrante.
Véase también codecForLocale().
QString QTextCodec::toUnicode(const QByteArray &a) const
Convierte a de la codificación de este códec a Unicode, y devuelve el resultado en un QString.
QString QTextCodec::toUnicode(const char *input, int size, int *state = nullptr) const
Convierte los primeros caracteres size del input de la codificación de este códec a Unicode, y devuelve el resultado en un QString.
Se actualiza el state del convertidor utilizado.
QString QTextCodec::toUnicode(const char *chars) const
chars contiene los caracteres de origen.
Se trata de una función sobrecargada.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.