이 페이지에서

QStringDecoder Class

QStringDecoder 클래스는 텍스트를 위한 상태 기반 디코더를 제공합니다. 더 보기...

헤더: #include <QStringDecoder>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QStringConverter

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 유형

공개 함수

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)
(since 6.11) QStringDecoder::FinalizeResult finalize()
(since 6.11) QStringDecoder::FinalizeResultQChar finalize(QChar *out, qsizetype maxlen)
(since 6.11) QStringDecoder::FinalizeResult finalize(char16_t *out, qsizetype maxlen)
qsizetype requiredSpace(qsizetype inputLength) const
QStringDecoder::EncodedData<QByteArrayView> operator()(QByteArrayView ba)
QStringDecoder::EncodedData<const QByteArray &> operator()(const QByteArray &ba)

정적 공용 멤버

QStringDecoder decoderForHtml(QByteArrayView data)

상세 설명

텍스트 디코더는 특정 인코딩을 사용하는 인코딩된 텍스트 형식을 Qt의 내부 표현으로 변환합니다.

인코딩된 데이터를 Qt의 내부 표현( QString )으로 변환하는 작업은 다음 코드를 사용하여 수행할 수 있습니다:

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

디코더는 호출 사이에 필요한 모든 상태를 기억하므로, 예를 들어 네트워크를 통해 데이터를 수신할 때와 같이 청크 단위로 수신된 데이터를 변환하는 것도 새로운 데이터가 도착할 때마다 디코더를 호출함으로써 쉽게 수행할 수 있습니다:

auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);

QString string;
while (new_data_available() && !toUtf16.hasError()) {
    QByteArray chunk = get_new_data();
    string += toUtf16(chunk);
}
auto result = toUtf16.finalize();
if (result.error != QStringDecoder::FinalizeResult::Error::NoError) {
    // Handle error
}

QStringDecoder 객체는 청크 간 상태를 유지하므로, 멀티바이트 문자 시퀀스 중간에서 청크가 분할되더라도 올바르게 작동합니다.

QStringDecoder 객체는 내부 상태 때문에 복사할 수는 없지만, 이동(move)은 가능합니다.

QStringConverter 및 QStringEncoder도 참조하십시오 .

멤버 유형 문서

[alias] QStringDecoder::FinalizeResult

이는 QStringConverter::FinalizeResultChar<char16_t>의 별칭입니다.

[alias] QStringDecoder::FinalizeResultQChar

이 페이지는 QStringConverter::FinalizeResultChar<QChar>의 별칭입니다.

멤버 함수 문서

[constexpr noexcept] QStringDecoder::QStringDecoder()

default는 디코더를 생성합니다. 기본 디코더는 유효하지 않으며, 텍스트 변환에 사용할 수 없습니다.

[explicit] QStringDecoder::QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)

name 와 flags 를 사용하여 디코더 객체를 생성합니다. name 가 알려진 인코딩의 이름이 아닌 경우, 유효하지 않은 변환기가 생성됩니다.

참고: Qt 6.8 이전버전에서는 이 함수가 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() 바이트 크기의 인코딩된 데이터 버퍼를 디코딩하는 데 필요한 최대 크기를 확인하십시오. 이 함수는 out 과 out + requiredSpace() 사이의 임의의 바이트 영역에 데이터를 쓸 수 있으며, 여기에는 반환된 끝 포인터를 넘어가는 영역도 포함됩니다.

requiredSpace도 참조하십시오 .

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

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.6에서 도입되었습니다.

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; };

[static] QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)

data 의 HTML 인코딩을 확인하기 위해 HTML 메타 태그 내의 선행 바이트 순서 표시(BOM) 또는 문자 집합 지정자를 검사하고, 해당 인코딩과 일치하는 QStringDecoder 를 반환합니다. 반환된 디코더가 유효하지 않은 경우, 지정된 인코딩은 QStringConverter 에서 지원되지 않는 것입니다. 인코딩이 감지되지 않으면 이 메서드는 Utf8용 디코더를 반환합니다.

isValid()도 참조하십시오 .

[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize()

[since 6.11] QStringDecoder::FinalizeResultQChar QStringDecoder::finalize(QChar *out, qsizetype maxlen)

[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize(char16_t *out, qsizetype maxlen)

디코더에 더 이상 데이터가 도착하지 않음을 알립니다.

또한 디코딩이 보류 중이던 잔여 콘텐츠의 데이터를 제공할 수도 있습니다. 처리해야 할 잔여 데이터가 없는 경우, 반환 값의 ` error ` 필드는 ` NoError`로 설정됩니다.

out 가 제공되고 null이 아닌 경우, 이 필드에는 최대 maxlen 개의 문자가 기록될 수 있는 공간이 있어야 합니다. 잔여 출력의 이만큼의 문자가 이 공간에 기록되며, 끝은 반환 값의 next 필드로 표시됩니다. 일반적으로 이 잔여 데이터는 변환되지 않은 나머지 입력 문자 하나당 하나의 대체 문자로 구성되어야 합니다.

모든 잔여 내용이 out 를 통해 전달되었거나, out 가 nullptr 인 경우, 또는 잔여 데이터가 없는 경우, finalize()에서 반환되면 디코더가 재설정됩니다. 그렇지 않은 경우, finalize()를 추가로 호출하여 남은 데이터를 가져오거나 버릴 수 있습니다.

이 함수들은 Qt 6.11에서 도입되었습니다.

hasError() 및 appendToBuffer()도 참조하십시오 .

qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const

inputLength 로 인코딩된 데이터를 처리하는 데 필요한 UTF-16 코드 유닛의 최대 개수를 반환합니다.

appendToBuffer도 참조하십시오 .

© 2026 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.