QStringEncoder 类

QStringEncoder 类提供了一个基于状态的文本编码器。 更多信息...

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

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

公共函数

QStringEncoder()
QStringEncoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
QStringEncoder(const char *name, QStringConverter::Flags flags = Flag::Default)
char *appendToBuffer(char *out, QStringView in)
QStringEncoder::DecodedData<const QString &>encode(const QString &in)
QStringEncoder::DecodedData<QStringView>encode(QStringView in)
qsizetyperequiredSpace(qsizetype inputLength) const
QStringEncoder::DecodedData<const QString &>operator()(const QString &in)
QStringEncoder::DecodedData<QStringView>operator()(QStringView in)

详细描述

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

使用以下代码可以将字符串从 Unicode 转换为本地编码

QString string = "...";
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);
QByteArray encodedString = fromUtf16(string);

编码器会记住调用之间的任何必要状态,因此以块的形式转换数据(例如,在通过网络接收数据时)很简单,只需在新的数据可用时调用编码器即可

auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);

QByteArray encoded;
while (new_data_available()) {
    QString chunk = get_new_data();
    encoded += fromUtf16(chunk);
}

QStringEncoder 对象在块之间保持状态,因此即使 UTF-16 备用字符在块之间拆分也能正确工作。

由于内部状态,QStringEncoder 对象不能复制,但可以移动。

另请参阅QStringConverterQStringDecoder.

成员函数文档

QStringEncoder::DecodedData<QStringView> QStringEncoder::encode(QStringView in)

QStringEncoder::DecodedData<QStringView> QStringEncoder::operator()(QStringView in)

QStringEncoder::DecodedData<const QString &> QStringEncoder::encode(const QString &in)

QStringEncoder::DecodedData<const QString &> QStringEncoder::operator()(const QString &in)

in转换并返回一个可以隐式转换为QByteArray的结构。

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

// Here you have to cast "data" to QByteArray
auto func = [&]() { return !fromUtf16.hasError() ? QByteArray(data) : "foo"_ba; }

[constexpr noexcept] QStringEncoder::QStringEncoder()

默认构建编码器。默认编码器无效,无法用于转换文本。

[explicit constexpr] QStringEncoder::QStringEncoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)

使用encodingflags创建编码器对象。

[explicit] QStringEncoder::QStringEncoder(const char *name, QStringConverter::Flags flags = Flag::Default)

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

另请参阅isValid().

char *QStringEncoder::appendToBuffer(char *out, QStringView in)

in编码并写入起始地址为out的缓冲区。返回写入数据的末尾指针。

注意:out的大小必须足够以容纳所有解码数据。使用requiredSpace()来确定编码in所需的最大大小。

另请参阅requiredSpace().

qsizetype QStringEncoder::requiredSpace(qsizetype inputLength) const

返回处理inputLength解码数据所需的最大字符数。

另请参阅appendToBuffer().

© 2024 Qt公司。本文档中的文档贡献版权归各所有者所有。本文档的提供受GNU自由文档许可证版本1.3条款约束,该许可证由自由软件基金会发布。Qt及相关标志是芬兰的Qt公司以及全球其他地区的商标。所有其他商标均属于各自所有者。