QStringConverter Class
QStringConverter 클래스는 텍스트의 인코딩 및 디코딩을 위한 기본 클래스를 제공합니다. 더 보기...
| 헤더: | #include <QStringConverter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 상속된 항목: |
- 상속받은 멤버를 포함한 모든 멤버 목록
- QStringConverter는 문자열 데이터용 클래스의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 유형
(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::Utf8 | 0 | UTF-8로 변환하거나 UTF-8에서 변환하는 변환기 생성 |
QStringConverter::Utf16 | 1 | UTF-16으로 변환하거나 UTF-16에서 변환하는 변환기를 생성합니다. 디코딩 시, 선행 바이트 순서 표시(BOM)를 통해 바이트 순서가 자동으로 감지됩니다. BOM이 없거나 인코딩 시에는 시스템 바이트 순서가 가정됩니다. |
QStringConverter::Utf16BE | 3 | 빅엔디안 UTF-16으로 변환하거나 UTF-16에서 빅엔디안으로 변환하는 변환기를 생성합니다. |
QStringConverter::Utf16LE | 2 | 리틀 엔디안 UTF-16으로 변환하거나 리틀 엔디안 UTF-16에서 변환하는 변환기를 생성합니다. |
QStringConverter::Utf32 | 4 | UTF-32로 변환하거나 UTF-32에서 변환하는 변환기를 만듭니다. 디코딩 시, 선행 바이트 순서 표시(BOM)를 통해 바이트 순서가 자동으로 감지됩니다. BOM이 없거나 인코딩 시에는 시스템 바이트 순서가 가정됩니다. |
QStringConverter::Utf32BE | 6 | 빅엔디안 UTF-32로 변환하거나 빅엔디안 UTF-32에서 변환하는 변환기를 생성합니다. |
QStringConverter::Utf32LE | 5 | 리틀 엔디안 UTF-32로 변환하거나 리틀 엔디안 UTF-32에서 변환하는 변환기를 만듭니다. |
QStringConverter::Latin1 | 7 | ISO-8859-1(Latin1)로 변환하거나 ISO-8859-1(Latin1)에서 변환하는 변환기를 만듭니다. |
QStringConverter::System | 8 | 운영 체제 로캘의 기본 인코딩으로 변환하거나 해당 인코딩에서 변환하는 변환기를 생성합니다. 유닉스 기반 시스템의 경우 이는 항상 UTF-8로 간주됩니다. Windows에서는 로캘 코드 페이지로 변환하거나 해당 코드 페이지에서 변환합니다. |
enum class QStringConverter::FinalizeResultError
| 상수 | 값 | 설명 |
|---|---|---|
QStringConverter::FinalizeResultError::NoError | 0 | 오류가 없습니다. |
QStringConverter::FinalizeResultError::InvalidCharacters | 1 | 인코더의 마무리가 성공적으로 완료되었으나, 마무리 과정 중 또는 그 이전에 유효하지 않은 문자가 발견되었습니다. |
QStringConverter::FinalizeResultError::NotEnoughSpace | 2 | finalize()가 성공 하지 못 했습니다. 버퍼를 확장한 후 finalize()를 다시 호출해야 합니다. |
enum class QStringConverter::Flag
flags QStringConverter::Flags
| 상수 | 값 | 설명 |
|---|---|---|
QStringConverter::Flag::Default | 0 | 기본 변환 규칙이 적용됩니다. |
QStringConverter::Flag::ConvertInvalidToNull | 0x2 | 이 플래그가 설정된 경우, 유효하지 않은 각 입력 문자는 널 문자로 출력됩니다. 설정되지 않은 경우, 유효하지 않은 입력 문자는 출력 인코딩이 해당 문자를 표현할 수 있으면 ` QChar::ReplacementCharacter `로, 그렇지 않으면 물음표로 표현됩니다. |
QStringConverter::Flag::WriteBom | 0x4 | QString 에서 출력 인코딩으로 변환할 때, 출력 인코딩이 이를 지원하는 경우 첫 번째 문자로 QChar::ByteOrderMark 을 기록합니다. UTF-8, UTF-16 및 UTF-32 인코딩의 경우 이에 해당합니다. |
QStringConverter::Flag::ConvertInitialBom | 0x8 | 입력 인코딩에서 QString 로 변환할 때, QStringDecoder 는 일반적으로 선행 바이트 순서 표시( QChar::ByteOrderMark)를 생략합니다. 이 플래그가 설정되면 바이트 순서 표시가 생략되지 않고 UTF-16으로 변환된 후 생성된 QString 의 시작 부분에 삽입됩니다. |
QStringConverter::Flag::Stateless | 0x1 | 문자열을 인코딩하거나 디코딩하는 서로 다른 함수 호출 간의 변환기 상태는 무시합니다. 또한 이로 인해 불완전한 데이터 시퀀스가 발견될 경우 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.