QStringConverter Class
La clase QStringConverter proporciona una clase base para codificar y decodificar texto. Más...
| Cabecera: | #include <QStringConverter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Heredado por: |
- Lista de todos los miembros, incluyendo los heredados
- QStringConverter es parte de Clases para datos de cadena.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos Públicos
(since 6.11) struct | FinalizeResultChar |
| enum | Encoding { Utf8, Utf16, Utf16BE, Utf16LE, Utf32, …, System } |
| enum class | FinalizeResultError { NoError, InvalidCharacters, NotEnoughSpace } |
| enum class | Flag { Default, ConvertInvalidToNull, WriteBom, ConvertInitialBom, Stateless } |
| flags | Flags |
Funciones Públicas
| bool | hasError() const |
| bool | isValid() const |
| const char * | name() const |
| void | resetState() |
Miembros Públicos Estáticos
| QStringList | availableCodecs() |
| std::optional<QStringConverter::Encoding> | encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0) |
| std::optional<QStringConverter::Encoding> | encodingForHtml(QByteArrayView data) |
| std::optional<QStringConverter::Encoding> | encodingForName(QAnyStringView name) |
| const char * | nameForEncoding(QStringConverter::Encoding e) |
Descripción Detallada
Qt utiliza UTF-16 para almacenar, dibujar y manipular cadenas. En muchas situaciones puede que desees tratar con datos que utilizan una codificación diferente. La mayoría de los datos de texto transferidos a través de archivos y conexiones de red están codificados en UTF-8.
La clase QStringConverter es una clase base para las clases QStringEncoder y QStringDecoder que ayudan con la conversión entre diferentes codificaciones de texto. QStringDecoder puede decodificar una cadena desde una representación codificada a UTF-16, el formato que Qt utiliza internamente. QStringEncoder realiza la operación contraria, codificando datos codificados en UTF-16 (normalmente en forma de QString) a la codificación solicitada.
Las siguientes codificaciones son siempre soportadas:
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- UTF-32BE
- UTF-32LE
- ISO-8859-1 (Latín-1)
- La codificación del sistema
QStringConverter puede soportar más codificaciones dependiendo de cómo se compiló Qt. Si se soportan más codecs, se pueden listar usando availableCodecs().
QStringConverters se puede utilizar de la siguiente manera para convertir alguna cadena codificada a y desde UTF-16.
Suponga que tiene alguna cadena codificada en UTF-8, y quiere convertirla a un QString. La forma sencilla de hacerlo es utilizar un QStringDecoder como este:
QByteArray encodedString = "..."; auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); QString string = toUtf16(encodedString);
Después de esto, string contiene el texto descodificado. Convertir una cadena de Unicode a la codificación local es igual de fácil utilizando la clase QStringEncoder:
QString string = "..."; auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8); QByteArray encodedString = fromUtf16(string);
Para leer o escribir archivos de texto en varias codificaciones, utilice QTextStream y su función setEncoding().
Hay que tener cierto cuidado al intentar convertir los datos en trozos, por ejemplo, al recibirlos a través de una red. En tales 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.
Tanto QStringEncoder como QStringDecoder lo facilitan, ya que realizan un seguimiento de este estado interno. Así que simplemente llamando al codificador o decodificador de nuevo con el siguiente trozo de datos continuará automáticamente codificando o decodificando los datos correctamente:
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); QString string; while (new_data_available() && !toUtf16.hasError()) { QByteArray chunk = get_new_data(); string += toUtf16(chunk); } auto result = toUtf16.finalize(); if (result.error != QStringDecoder::FinalizeResult::Error::NoError) { // Handle error }
El objeto QStringDecoder mantiene el estado entre trozos y, por tanto, funciona correctamente incluso si un carácter multibyte se divide entre trozos.
Los objetos QStringConverter no pueden ser copiados debido a su estado interno, pero pueden ser movidos.
Ver también QTextStream, QStringDecoder, y QStringEncoder.
Documentación de tipos de miembros
enum QStringConverter::Encoding
| Constante | Valor | Descripción |
|---|---|---|
QStringConverter::Utf8 | 0 | Crear un conversor a o desde UTF-8 |
QStringConverter::Utf16 | 1 | Crea un conversor a o desde UTF-16. Al descodificar, el orden de bytes se detectará automáticamente mediante una marca de orden de bytes inicial. Si no existe ninguna o al codificar, se asumirá el orden de bytes del sistema. |
QStringConverter::Utf16BE | 3 | Crear un conversor desde o hacia UTF-16 big-endian. |
QStringConverter::Utf16LE | 2 | Crear un conversor desde o hacia UTF-16 little-endian. |
QStringConverter::Utf32 | 4 | Crear un conversor a o desde UTF-32. Al descodificar, el orden de los bytes se detectará automáticamente mediante una marca de orden de bytes inicial. Si no existe ninguna o al codificar, se asumirá el orden de bytes del sistema. |
QStringConverter::Utf32BE | 6 | Crear un conversor desde o hacia UTF-32 big-endian. |
QStringConverter::Utf32LE | 5 | Crear un conversor desde o hacia UTF-32 little-endian. |
QStringConverter::Latin1 | 7 | Crear un conversor a o desde ISO-8859-1 (Latin1). |
QStringConverter::System | 8 | Crear un conversor a o desde la codificación subyacente de la configuración regional del sistema operativo. En los sistemas basados en Unix siempre se asume que es UTF-8. En Windows, se convierte a y desde la página de códigos de la configuración regional. |
enum class QStringConverter::FinalizeResultError
| Constante | Valor | Descripción |
|---|---|---|
QStringConverter::FinalizeResultError::NoError | 0 | Sin error. |
QStringConverter::FinalizeResultError::InvalidCharacters | 1 | El codificador finalizó con éxito, pero encontró caracteres inválidos durante la finalización o algún tiempo antes. |
QStringConverter::FinalizeResultError::NotEnoughSpace | 2 | finalize() no tuvo éxito, debe hacer crecer el buffer y llamar a finalize() de nuevo. |
enum class QStringConverter::Flag
flags QStringConverter::Flags
| Constante | Valor | Descripción |
|---|---|---|
QStringConverter::Flag::Default | 0 | Se aplican las reglas de conversión por defecto. |
QStringConverter::Flag::ConvertInvalidToNull | 0x2 | Si se establece esta bandera, cada carácter de entrada inválido se emite como un carácter nulo. Si no está activada, los caracteres de entrada no válidos se representan como QChar::ReplacementCharacter si la codificación de salida puede representar ese carácter; en caso contrario, como un signo de interrogación. |
QStringConverter::Flag::WriteBom | 0x4 | Al convertir de QString a una codificación de salida, escriba QChar::ByteOrderMark como primer carácter si la codificación de salida lo admite. Este es el caso de las codificaciones UTF-8, UTF-16 y UTF-32. |
QStringConverter::Flag::ConvertInitialBom | 0x8 | Al convertir de una codificación de entrada a QString, QStringDecoder suele omitir un QChar::ByteOrderMark inicial. Si se activa esta bandera, la marca de orden de bytes no se omitirá, sino que se convertirá a utf-16 y se insertará al principio del QString creado. |
QStringConverter::Flag::Stateless | 0x1 | Ignora posibles estados del conversor entre diferentes llamadas a funciones para codificar o descodificar cadenas. Esto también hará que QStringConverter genere un error si se encuentra una secuencia de datos incompleta. |
El tipo Flags es un typedef para QFlags<Flag>. Almacena una combinación OR de valores Flag.
Documentación de las funciones miembro
[static] QStringList QStringConverter::availableCodecs()
Devuelve una lista de nombres de códecs compatibles. Los nombres devueltos por esta función se pueden pasar al constructor de QStringEncoder's y QStringDecoder's para crear un en- o decodificador para el códec dado.
Esta función puede utilizarse para obtener una lista de códecs adicionales a los estándar. El soporte para códecs adicionales requiere que Qt esté compilado con soporte para la librería ICU.
Nota: El orden de los códecs es un detalle interno de la implementación y no se garantiza que sea estable.
[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)
Devuelve la codificación del contenido de data si se puede determinar. expectedFirstCharacter se puede pasar como una pista adicional para ayudar a determinar la codificación.
El opcional devuelto está vacío, si la codificación no está clara.
[static] std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)
Intenta determinar la codificación del HTML en data fijándose en las marcas de orden de bytes iniciales o en un especificador charset de la metaetiqueta HTML. Si el opcional está vacío, la codificación especificada no es compatible con QStringConverter. Si no se detecta ninguna codificación, el método devuelve Utf8.
Véase también QStringDecoder::decoderForHtml().
[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(QAnyStringView name)
Convierte name al miembro Encoding correspondiente, si existe.
Si name no es el nombre de un códec incluido en la enumeración Encoding, se devuelve std::nullopt. Dicho nombre puede, no obstante, ser aceptado por el constructor QStringConverter cuando Qt se construye con ICU, si ICU proporciona un convertidor con el nombre dado.
Nota: En versiones de Qt anteriores a la 6.8, esta función sólo tomaba un const char *, que se esperaba que estuviera codificado en UTF-8.
[noexcept] bool QStringConverter::hasError() const
Devuelve true si una conversión no pudo convertir correctamente un carácter. Esto puede ocurrir, por ejemplo, si la secuencia UTF-8 no es válida o si un carácter no se puede convertir debido a limitaciones en la codificación de destino.
[noexcept] bool QStringConverter::isValid() const
Devuelve true si se trata de un conversor de cadenas válido que puede utilizarse para codificar o descodificar texto.
Los convertidores de cadenas construidos por defecto o los convertidores construidos con un nombre no admitido no son válidos.
[noexcept] const char *QStringConverter::name() const
Devuelve el nombre canónico de la codificación que este QStringConverter puede codificar o descodificar. Devuelve un nullptr si el convertidor no es válido. El nombre devuelto está codificado en UTF-8.
Véase también isValid().
[static noexcept] const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
Devuelve el nombre canónico para la codificación e o nullptr si e es un valor inválido.
Nota: En versiones de Qt anteriores a 6.10, 6.9.1, 6.8.4 o 6.5.9, llamar a esta función con un argumento inválido resultaba en un comportamiento indefinido. Desde las versiones de Qt mencionadas, devuelve nullptr en su lugar.
[noexcept] void QStringConverter::resetState()
Restablece el estado interno del convertidor, eliminando posibles errores o conversiones parciales.
© 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.