En esta página

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:

QStringDecoder y QStringEncoder

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

ConstanteValorDescripción
QStringConverter::Utf80Crear un conversor a o desde UTF-8
QStringConverter::Utf161Crea 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::Utf16BE3Crear un conversor desde o hacia UTF-16 big-endian.
QStringConverter::Utf16LE2Crear un conversor desde o hacia UTF-16 little-endian.
QStringConverter::Utf324Crear 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::Utf32BE6Crear un conversor desde o hacia UTF-32 big-endian.
QStringConverter::Utf32LE5Crear un conversor desde o hacia UTF-32 little-endian.
QStringConverter::Latin17Crear un conversor a o desde ISO-8859-1 (Latin1).
QStringConverter::System8Crear 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

ConstanteValorDescripción
QStringConverter::FinalizeResultError::NoError0Sin error.
QStringConverter::FinalizeResultError::InvalidCharacters1El codificador finalizó con éxito, pero encontró caracteres inválidos durante la finalización o algún tiempo antes.
QStringConverter::FinalizeResultError::NotEnoughSpace2finalize() no tuvo éxito, debe hacer crecer el buffer y llamar a finalize() de nuevo.

enum class QStringConverter::Flag
flags QStringConverter::Flags

ConstanteValorDescripción
QStringConverter::Flag::Default0Se aplican las reglas de conversión por defecto.
QStringConverter::Flag::ConvertInvalidToNull0x2Si 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::WriteBom0x4Al 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::ConvertInitialBom0x8Al 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::Stateless0x1Ignora 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.