QStringEncoder Class
The QStringEncoder class provides a state-based encoder for text. More...
Header: | #include <QStringEncoder> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | QStringConverter |
Note: All functions in this class are reentrant.
Public Functions
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) |
qsizetype | requiredSpace(qsizetype inputLength) const |
QStringEncoder::DecodedData<const QString &> | operator()(const QString &in) |
QStringEncoder::DecodedData<QStringView> | operator()(QStringView in) |
Detailed Description
A text encoder converts text from Qt's internal representation into an encoded text format using a specific encoding.
Converting a string from Unicode to the local encoding can be achieved using the following code:
QString string = "..."; auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8); QByteArray encodedString = fromUtf16(string);
The encoder remembers any state that is required between calls, so converting data received in chunks, for example, when receiving it over a network, is just as easy, by calling the encoder whenever new data is available:
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8); QByteArray encoded; while (new_data_available()) { QString chunk = get_new_data(); encoded += fromUtf16(chunk); }
The QStringEncoder object maintains state between chunks and therefore works correctly even if a UTF-16 surrogate character is split between chunks.
QStringEncoder objects can't be copied because of their internal state, but can be moved.
See also QStringConverter and QStringDecoder.
Member Function Documentation
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)
Converts in and returns a struct that is implicitly convertible to 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()
Default constructs an encoder. The default encoder is not valid, and can't be used for converting text.
[explicit constexpr]
QStringEncoder::QStringEncoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
Creates an encoder object using encoding and flags.
[explicit]
QStringEncoder::QStringEncoder(const char *name, QStringConverter::Flags flags = Flag::Default)
Creates an encoder object using name and flags. If name is not the name of a known encoding an invalid converter will get created.
See also isValid().
char *QStringEncoder::appendToBuffer(char *out, QStringView in)
Encodes in and writes the encoded result into the buffer starting at out. Returns a pointer to the end of the data written.
Note: out must be large enough to be able to hold all the decoded data. Use requiredSpace() to determine the maximum size requirement to be able to encode in.
See also requiredSpace().
qsizetype QStringEncoder::requiredSpace(qsizetype inputLength) const
Returns the maximum amount of characters required to be able to process inputLength decoded data.
See also appendToBuffer().