QStringDecoder Class
QStringDecoder 类提供了一个基于状态的文本解码器。更多
Header: | #include <QStringDecoder> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
继承: | QStringConverter |
- 所有成员的列表,包括继承成员
- QStringDecoder 属于字符串数据类。
注意:该类中的所有函数都是可重入的。
公共函数
QStringDecoder() | |
QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default) | |
QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default) | |
QChar * | appendToBuffer(QChar *out, QByteArrayView in) |
(since 6.6) char16_t * | appendToBuffer(char16_t *out, QByteArrayView in) |
QStringDecoder::EncodedData<QByteArrayView> | decode(QByteArrayView ba) |
QStringDecoder::EncodedData<const QByteArray &> | decode(const QByteArray &ba) |
qsizetype | requiredSpace(qsizetype inputLength) const |
QStringDecoder::EncodedData<QByteArrayView> | operator()(QByteArrayView ba) |
QStringDecoder::EncodedData<const QByteArray &> | operator()(const QByteArray &ba) |
静态公共成员
QStringDecoder | decoderForHtml(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 对象因其内部状态而无法复制,但可以移动。
另请参阅 QStringConverter 和QStringEncoder 。
成员函数文档
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 noexcept]
QStringDecoder::QStringDecoder()
默认构造一个解码器。默认解码器无效,不能用于转换文本。
[explicit]
QStringDecoder::QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)
使用name 和flags 创建解码器对象。如果name 不是已知编码的名称,则将创建一个无效的转换器。
注意: 在 6.8 之前的 Qt XML 版本中,此函数只接受const char *
,而 应为 UTF-8 编码。
另请参阅 isValid() 。
[explicit constexpr]
QStringDecoder::QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
使用encoding 和flags 创建解码器对象。
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 中引入。
[static]
QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)
通过查看前导字节序标记或 HTML 元标记中的字符集指定符,尝试确定data 中 HTML 的编码,并返回与编码相匹配的QStringDecoder 。如果返回的解码器无效,则说明QStringConverter 不支持指定的编码。如果未检测到编码,该方法将返回 Utf8 的解码器。
另请参阅 isValid().
qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const
返回处理inputLength 编码数据所需的 UTF-16 代码单元的最大数量。
另请参阅 appendToBuffer 。
© 2025 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.