QStringDecoder 类

QStringDecoder 类为文本提供了一个基于状态的解码器。 更多...

头文件 #include <QStringDecoder>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QStringConverter

注意: 此类中所有函数都是可重入的

公共函数

QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
QStringDecoder()
QStringDecoder(const char *name, QStringConverter::Flags flags = Flag::Default)
QChar *appendToBuffer(QChar *out, QByteArrayView in)
(since 6.6) char16_t *appendToBuffer(char16_t *out, QByteArrayView in)
QStringDecoder::EncodedData<const QByteArray &>decode(const QByteArray &ba)
QStringDecoder::EncodedData<QByteArrayView>decode(QByteArrayView ba)
qsizetyperequiredSpace(qsizetype inputLength) const
QStringDecoder::EncodedData<const QByteArray &>operator()(const QByteArray &ba)
QStringDecoder::EncodedData<QByteArrayView>operator()(QByteArrayView ba)

静态公共成员

QStringDecoderdecoderForHtml(QByteArrayView data)

详细说明

文本解码器将使用特定编码的编码文本格式转换为 Qt 内部表示。

使用以下代码可以将编码数据转换为 QString

QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
QString string = toUtf16(encodedString);

解码器会记住调用之间需要的任何状态,因此在接收到数据块时,例如通过网络接收时,可以通过在新的数据可用时调用解码器来实现,这同样简单。

auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);

QString string;
while (new_data_available()) {
    QByteArray chunk = get_new_data();
    string += toUtf16(chunk);
}

QStringDecoder 对象在数据块之间维护状态,因此即使数据块在多字节字符序列中间被分割也能正确工作。

由于内部状态的原因,QStringDecoder 对象不能被复制,但可以被移动。

另请参阅QStringConverterQStringEncoder

成员函数文档

QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::decode(QByteArrayView ba)

QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::operator()(QByteArrayView ba)

QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::decode(const QByteArray &ba)

QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::operator()(const QByteArray &ba)

ba 转换,并返回一个可以隐式转换为 QString 的结构体。

QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
auto data = toUtf16(encodedString); // data's type is QStringDecoder::EncodedData<const QByteArray &>
QString string = toUtf16(encodedString); // Implicit conversion to QString

// Here you have to cast "data" to QString
auto func = [&]() { return !toUtf16.hasError() ? QString(data) : u"foo"_s; }

[显式 constexpr] QStringDecoder::QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)

使用 encodingflags 创建解码器对象。

[constexpr noexcept] QStringDecoder::QStringDecoder()

默认构造解码器。默认解码器无效,不能用于转换文本。

[显式] QStringDecoder::QStringDecoder(const char *name, QStringConverter::Flags flags = Flag::Default)

使用 nameflags 创建解码器对象。如果 name 不是已知编码的名称,将创建无效的转换器。

另请参阅isValid().

QChar *QStringDecoder::appendToBuffer(QChar *out, QByteArrayView in)

解码由 in 观察的字节序列,并将解码结果写入以 out 为起始位置的缓冲区。返回写入数据的末尾指针。

out 需要足够大以容纳所有解码数据。使用 requiredSpace 确定解码 in.size() 字节编码数据缓冲区的最大大小要求。

另请参阅requiredSpace.

[since 6.6] char16_t *QStringDecoder::appendToBuffer(char16_t *out, QByteArrayView in)

这是一个重载函数。

此函数自 Qt 6.6 版本起引入。

[静态] QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)

试图通过查看HTML中的元首字节顺序标记或字符集指定符,来确定数据中的HTML编码,并返回一个与编码匹配的QStringDecoder。如果返回的解码器无效,则指定给QStringConverter的编码不受支持。如果没有检测到编码,则该方法返回一个Utf8解码器。

另请参阅isValid().

qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const

返回处理inputLength编码数据的UTF-16代码单元所需的最大数量。

另请参阅appendToBuffer

© 2024 Qt公司有限。本文件中的文档贡献属于各自所有者的版权。提供的文档根据Free Software Foundation发布的GNU自由文档许可版本1.3的条款进行许可。Qt和相应的徽标是芬兰及其它国家/地区的Qt公司商标。所有其他商标均为其各自所有者的财产。