QStringDecoder 类
QStringDecoder 类为文本提供了一个基于状态的解码器。 更多...
头文件 | #include <QStringDecoder> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += 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) |
qsizetype | requiredSpace(qsizetype inputLength) const |
QStringDecoder::EncodedData<const QByteArray &> | operator()(const QByteArray &ba) |
QStringDecoder::EncodedData<QByteArrayView> | operator()(QByteArrayView 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]
QStringDecoder::QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
使用 encoding 和 flags 创建解码器对象。
[constexpr noexcept]
QStringDecoder::QStringDecoder()
默认构造解码器。默认解码器无效,不能用于转换文本。
[显式]
QStringDecoder::QStringDecoder(const char *name, QStringConverter::Flags flags = Flag::Default)
使用 name 和 flags 创建解码器对象。如果 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公司商标。所有其他商标均为其各自所有者的财产。