이 페이지에서

QStringConverter Class

QStringConverter 클래스는 텍스트의 인코딩 및 디코딩을 위한 기본 클래스를 제공합니다. 더 보기...

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

QStringDecoder 그리고 QStringEncoder

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

공개 유형

(since 6.11) struct FinalizeResultChar
enum Encoding { Utf8, Utf16, Utf16BE, Utf16LE, Utf32, …, System }
enum class FinalizeResultError { NoError, InvalidCharacters, NotEnoughSpace }
enum class Flag { Default, ConvertInvalidToNull, WriteBom, ConvertInitialBom, Stateless }
flags Flags

공개 함수

QStringConverter(QStringConverter &&)
bool hasError() const
bool isValid() const
const char *name() const
void resetState()
QStringConverter &operator=(QStringConverter &&)

정적 공용 멤버

QStringList availableCodecs()
std::optional<QStringConverter::Encoding> encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)
std::optional<QStringConverter::Encoding> encodingForHtml(QByteArrayView data)
std::optional<QStringConverter::Encoding> encodingForName(QAnyStringView name)
const char *nameForEncoding(QStringConverter::Encoding e)

보호된 함수

상세 설명

Qt는 문자열을 저장, 렌더링 및 조작하는 데 UTF-16을 사용합니다. 많은 상황에서 다른 인코딩을 사용하는 데이터를 처리해야 할 수도 있습니다. 파일이나 네트워크 연결을 통해 전송되는 대부분의 텍스트 데이터는 UTF-8로 인코딩되어 있습니다.

QStringConverter 클래스는 서로 다른 텍스트 인코딩 간 변환을 돕는 QStringEncoder 및 QStringDecoder 클래스의 기저 클래스입니다. QStringDecoder 는 인코딩된 표현의 문자열을 Qt가 내부적으로 사용하는 형식인 UTF-16으로 디코딩할 수 있습니다. QStringEncoder 는 그 반대의 작업을 수행하여, UTF-16으로 인코딩된 데이터(일반적으로 QString 형태)를 요청된 인코딩으로 인코딩합니다.

다음 인코딩은 항상 지원됩니다:

  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • ISO-8859-1 (Latin-1)
  • 시스템 인코딩

QStringConverter는 Qt의 컴파일 방식에 따라 더 많은 인코딩을 지원할 수 있습니다. 더 많은 코덱이 지원되는 경우, ` availableCodecs()`를 사용하여 목록을 확인할 수 있습니다.

QStringConverters는 다음과 같이 사용하여 인코딩된 문자열을 UTF-16으로 변환하거나 UTF-16에서 다른 인코딩으로 변환할 수 있습니다.

UTF-8로 인코딩된 문자열이 있고, 이를 QString 로 변환하고 싶다고 가정해 봅시다. 이를 수행하는 간단한 방법은 다음과 같이 QStringDecoder 를 사용하는 것입니다:

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

이 후, ` string `에는 디코딩된 형태의 텍스트가 저장됩니다. 유니코드 문자열을 로컬 인코딩으로 변환하는 것도 ` QStringEncoder ` 클래스를 사용하면 마찬가지로 간단합니다:

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

다양한 인코딩으로 텍스트 파일을 읽거나 쓰려면 QTextStream 와 그 setEncoding() 함수를 사용하십시오.

예를 들어 네트워크를 통해 데이터를 수신하는 경우와 같이, 데이터를 청크 단위로 변환할 때는 주의가 필요합니다. 이러한 경우 멀티바이트 문자가 두 개의 청크로 분할될 가능성이 있습니다. 최상의 경우 한 글자가 손실될 수 있으며, 최악의 경우 전체 변환이 실패할 수도 있습니다.

QStringEncoder 와 QStringDecoder 는 내부 상태를 추적함으로써 이 문제를 쉽게 해결합니다. 따라서 다음 청크의 데이터로 인코더나 디코더를 다시 호출하기만 하면 데이터 인코딩 또는 디코딩이 자동으로 올바르게 계속 진행됩니다:

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 객체는 청크 간 상태를 유지하므로, 멀티바이트 문자가 두 청크에 걸쳐 분할되더라도 올바르게 작동합니다.

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

QTextStream, QStringDecoder 및 QStringEncoder도 참조하십시오 .

멤버 유형 문서

enum QStringConverter::Encoding

상수값설명
QStringConverter::Utf80UTF-8로 변환하거나 UTF-8에서 변환하는 변환기 생성
QStringConverter::Utf161UTF-16으로 변환하거나 UTF-16에서 변환하는 변환기를 생성합니다. 디코딩 시, 선행 바이트 순서 표시(BOM)를 통해 바이트 순서가 자동으로 감지됩니다. BOM이 없거나 인코딩 시에는 시스템 바이트 순서가 가정됩니다.
QStringConverter::Utf16BE3빅엔디안 UTF-16으로 변환하거나 UTF-16에서 빅엔디안으로 변환하는 변환기를 생성합니다.
QStringConverter::Utf16LE2리틀 엔디안 UTF-16으로 변환하거나 리틀 엔디안 UTF-16에서 변환하는 변환기를 생성합니다.
QStringConverter::Utf324UTF-32로 변환하거나 UTF-32에서 변환하는 변환기를 만듭니다. 디코딩 시, 선행 바이트 순서 표시(BOM)를 통해 바이트 순서가 자동으로 감지됩니다. BOM이 없거나 인코딩 시에는 시스템 바이트 순서가 가정됩니다.
QStringConverter::Utf32BE6빅엔디안 UTF-32로 변환하거나 빅엔디안 UTF-32에서 변환하는 변환기를 생성합니다.
QStringConverter::Utf32LE5리틀 엔디안 UTF-32로 변환하거나 리틀 엔디안 UTF-32에서 변환하는 변환기를 만듭니다.
QStringConverter::Latin17ISO-8859-1(Latin1)로 변환하거나 ISO-8859-1(Latin1)에서 변환하는 변환기를 만듭니다.
QStringConverter::System8운영 체제 로캘의 기본 인코딩으로 변환하거나 해당 인코딩에서 변환하는 변환기를 생성합니다. 유닉스 기반 시스템의 경우 이는 항상 UTF-8로 간주됩니다. Windows에서는 로캘 코드 페이지로 변환하거나 해당 코드 페이지에서 변환합니다.

enum class QStringConverter::FinalizeResultError

상수값설명
QStringConverter::FinalizeResultError::NoError0오류가 없습니다.
QStringConverter::FinalizeResultError::InvalidCharacters1인코더의 마무리가 성공적으로 완료되었으나, 마무리 과정 중 또는 그 이전에 유효하지 않은 문자가 발견되었습니다.
QStringConverter::FinalizeResultError::NotEnoughSpace2finalize()가 성공 하지 못 했습니다. 버퍼를 확장한 후 finalize()를 다시 호출해야 합니다.

enum class QStringConverter::Flag
flags QStringConverter::Flags

상수값설명
QStringConverter::Flag::Default0기본 변환 규칙이 적용됩니다.
QStringConverter::Flag::ConvertInvalidToNull0x2이 플래그가 설정된 경우, 유효하지 않은 각 입력 문자는 널 문자로 출력됩니다. 설정되지 않은 경우, 유효하지 않은 입력 문자는 출력 인코딩이 해당 문자를 표현할 수 있으면 ` QChar::ReplacementCharacter `로, 그렇지 않으면 물음표로 표현됩니다.
QStringConverter::Flag::WriteBom0x4QString 에서 출력 인코딩으로 변환할 때, 출력 인코딩이 이를 지원하는 경우 첫 번째 문자로 QChar::ByteOrderMark 을 기록합니다. UTF-8, UTF-16 및 UTF-32 인코딩의 경우 이에 해당합니다.
QStringConverter::Flag::ConvertInitialBom0x8입력 인코딩에서 QString 로 변환할 때, QStringDecoder 는 일반적으로 선행 바이트 순서 표시( QChar::ByteOrderMark)를 생략합니다. 이 플래그가 설정되면 바이트 순서 표시가 생략되지 않고 UTF-16으로 변환된 후 생성된 QString 의 시작 부분에 삽입됩니다.
QStringConverter::Flag::Stateless0x1문자열을 인코딩하거나 디코딩하는 서로 다른 함수 호출 간의 변환기 상태는 무시합니다. 또한 이로 인해 불완전한 데이터 시퀀스가 발견될 경우 QStringConverter 에서 오류가 발생합니다.

Flags 유형은 QFlags<Flag>에 대한 typedef입니다. 이 유형은 Flag 값들의 OR 조합을 저장합니다.

멤버 함수 설명서

[noexcept default] QStringConverter::QStringConverter(QStringConverter &&)

QStringConverter 의 인스턴스를 Move 방식으로 생성합니다.

[noexcept protected default] QStringConverter::~QStringConverter()

QStringConverter 의 인스턴스를 삭제합니다.

[static] QStringList QStringConverter::availableCodecs()

지원되는 코덱 이름의 목록을 반환합니다. 이 함수가 반환하는 이름은 QStringEncoder 및 QStringDecoder 의 생성자에 전달하여, 주어진 코덱에 대한 인코더 또는 디코더를 생성하는 데 사용할 수 있습니다.

이 함수는 표준 코덱 이외의 추가 코덱 목록을 얻기 위해 사용할 수 있습니다. 추가 코덱을 지원하려면 Qt를 ICU 라이브러리 지원 옵션으로 컴파일해야 합니다.

참고: 코덱의순서는 내부 구현 세부 사항이며, 안정성이 보장되지 않습니다.

[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)

data 의 콘텐츠 인코딩을 확인할 수 있는 경우 해당 인코딩을 반환합니다. 인코딩을 확인하는 데 도움이 되도록 expectedFirstCharacter 을 추가 힌트로 전달할 수 있습니다.

인코딩을 명확히 파악할 수 없는 경우, 반환되는 옵셔널은 비어 있습니다.

[static] std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)

data 의 HTML 인코딩을, 선행 바이트 순서 표시(BOM)나 HTML 메타 태그의 문자 집합 지정자를 확인하여 파악하려고 시도합니다. 선택적 매개변수가 비어 있는 경우, 지정된 인코딩은 QStringConverter 에서 지원되지 않습니다. 인코딩이 감지되지 않으면 이 메서드는 Utf8을 반환합니다.

QStringDecoder::decoderForHtml()도 참조하십시오 .

[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(QAnyStringView name)

name 를 해당 Encoding 멤버로 변환합니다(해당 멤버가 있는 경우).

name 가 Encoding 열거형에 나열된 코덱 이름이 아닌 경우, std::nullopt 가 반환됩니다. 다만, Qt가 ICU와 함께 빌드된 경우, ICU가 주어진 이름의 변환기를 제공하는 한 QStringConverter 생성자에서 해당 이름을 허용할 수 있습니다.

참고: Qt 6.8 이전버전에서는 이 함수가 UTF-8로 인코딩된 것으로 간주되는 const char * 만 인수로 받았습니다.

[noexcept] bool QStringConverter::hasError() const

변환 과정에서 문자를 올바르게 변환할 수 없는 경우 true를 반환합니다. 예를 들어, 유효하지 않은 UTF-8 시퀀스가 있거나 대상 인코딩의 제한으로 인해 문자를 변환할 수 없는 경우 등이 이에 해당합니다.

[noexcept] bool QStringConverter::isValid() const

이 객체가 텍스트 인코딩 또는 디코딩에 사용할 수 있는 유효한 문자열 변환기인 경우 true를 반환합니다.

기본 생성된 문자열 변환기나 지원되지 않는 이름으로 생성된 변환기는 유효하지 않습니다.

[noexcept] const char *QStringConverter::name() const

이 QStringConverter 가 인코딩하거나 디코딩할 수 있는 인코딩의 표준 이름을 반환합니다. 변환기가 유효하지 않은 경우 nullptr을 반환합니다. 반환된 이름은 UTF-8로 인코딩되어 있습니다.

isValid()도 참조하십시오 .

[static noexcept] const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)

인코딩 e 의 정규 이름을 반환하며, e 가 유효하지 않은 값인 경우 nullptr 을 반환합니다.

참고: Qt 6.10, 6.9.1, 6.8.4 또는 6.5.9 이전버전에서는 유효하지 않은 인수를 사용하여 이 함수를 호출하면 정의되지 않은 동작이 발생했습니다. 앞서 언급한 Qt 버전부터는 대신 nullptr을 반환합니다.

[noexcept] void QStringConverter::resetState()

컨버터의 내부 상태를 초기화하여 잠재적인 오류나 부분적인 변환을 제거합니다.

[noexcept default] QStringConverter &QStringConverter::operator=(QStringConverter &&)

other 를 이 QStringConverter 인스턴스에 할당합니다.

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