QTextCodec Class
QTextCodec 클래스는 텍스트 인코딩 간 변환 기능을 제공합니다. 더 보기...
| 헤더: | #include <QTextCodec> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake: | QT += core5compat |
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
- setCodecForLocale(QTextCodec *c)
- ~QTextCodec()
참고: 다음 함수들은 스레드 안전합니다:
- codecForName(const QByteArray &name)
- codecForMib(int mib)
- availableCodecs()
- availableMibs()
- codecForLocale()
공개 함수
| virtual QList<QByteArray> | aliases() const |
| bool | canEncode(QChar ch) const |
| bool | canEncode(QStringView s) const |
| bool | canEncode(const QString &s) const |
| QByteArray | fromUnicode(const QString &str) const |
| QByteArray | fromUnicode(const QChar *input, int number, int *state = nullptr) const |
| QByteArray | fromUnicode(QStringView str) const |
| QTextDecoder * | makeDecoder(int flags = DefaultConversion) const |
| QTextEncoder * | makeEncoder(int flags = DefaultConversion) const |
| virtual int | mibEnum() const = 0 |
| virtual QByteArray | name() const = 0 |
| QString | toUnicode(const QByteArray &a) const |
| QString | toUnicode(const char *input, int size, int *state = nullptr) const |
| QString | toUnicode(const char *chars) const |
정적 공용 멤버
| QList<QByteArray> | availableCodecs() |
| QList<int> | availableMibs() |
| QTextCodec * | codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec) |
| QTextCodec * | codecForHtml(const QByteArray &ba) |
| QTextCodec * | codecForLocale() |
| QTextCodec * | codecForMib(int mib) |
| QTextCodec * | codecForName(const QByteArray &name) |
| QTextCodec * | codecForName(const char *name) |
| QTextCodec * | codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec) |
| QTextCodec * | codecForUtfText(const QByteArray &ba) |
| void | setCodecForLocale(QTextCodec *c) |
보호된 함수
| QTextCodec() | |
| virtual | ~QTextCodec() |
| virtual QByteArray | convertFromUnicode(const QChar *input, int number, int *state) const = 0 |
| virtual QString | convertToUnicode(const char *chars, int len, int *state) const = 0 |
상세 설명
Qt는 문자열을 저장, 표시 및 조작할 때 유니코드를 사용합니다. 많은 상황에서 다른 인코딩을 사용하는 데이터를 처리해야 할 수도 있습니다. 예를 들어, 대부분의 일본어 문서는 여전히 Shift-JIS 또는 ISO 2022-JP로 저장되어 있는 반면, 러시아 사용자들은 문서를 KOI8-R 또는 Windows-1251로 저장하는 경우가 많습니다.
Qt는 비유니코드 형식을 유니코드로, 또는 유니코드를 비유니코드 형식으로 변환하는 데 도움을 주는 일련의 QTextCodec 클래스를 제공합니다. 또한 사용자 정의 코덱 클래스를 직접 만들 수도 있습니다.
지원되는 인코딩은 다음과 같습니다:
- Big5
- Big5-HKSCS
- CP949
- EUC-JP
- EUC-KR
- GB18030
- HP-ROMAN8
- IBM 850
- IBM 866
- IBM 874
- ISO 2022-JP
- ISO 8859-1 ~ 10
- ISO 8859-13 ~ 16
- Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg 및 Tml
- KOI8-R
- KOI8-U
- 매킨토시
- Shift-JIS
- TIS-620
- TSCII
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- UTF-32BE
- UTF-32LE
- Windows-1250 ~ 1258
Qt가 ICU 지원을 활성화한 상태로 컴파일된 경우, ICU가 지원하는 대부분의 코덱을 애플리케이션에서도 사용할 수 있습니다.
QTextCodecs는 로컬 인코딩된 문자열을 유니코드로 변환하는 데 다음과 같이 사용할 수 있습니다. 러시아어 KOI8-R 인코딩으로 인코딩된 문자열이 있고, 이를 유니코드로 변환하고자 한다고 가정해 보겠습니다. 이를 수행하는 간단한 방법은 다음과 같습니다.
QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);이 후, ` string `에는 유니코드로 변환된 텍스트가 담겨 있습니다. 문자열을 유니코드에서 로컬 인코딩으로 변환하는 것도 마찬가지로 쉽습니다:
QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);예를 들어 네트워크를 통해 데이터를 수신하는 경우와 같이 데이터를 청크 단위로 변환할 때는 주의가 필요합니다. 이러한 경우 멀티바이트 문자가 두 개의 청크로 나뉘어질 가능성이 있습니다. 최상의 경우 한 글자가 손실될 수 있으며, 최악의 경우 전체 변환이 실패할 수도 있습니다.
이러한 상황에서 취해야 할 접근 방식은 코덱에 대한 ` QTextDecoder ` 객체를 생성하고, 아래와 같이 전체 디코딩 과정에 이 ` QTextDecoder `를 사용하는 것입니다:
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
QTextDecoder *decoder = codec->makeDecoder();
QString string;
while (new_data_available()) {
QByteArray chunk = get_new_data();
string += decoder->toUnicode(chunk);
}
delete decoder;QTextDecoder 객체는 청크 간 상태를 유지하므로, 다바이트 문자가 청크 사이에 분할되더라도 올바르게 작동합니다.
자신만의 코덱 클래스 만들기
QTextCodec의 하위 클래스를 생성하여 Qt에 새로운 텍스트 인코딩을 지원할 수 있습니다.
순수 가상 함수는 시스템에 인코더를 설명하며, 인코더는 QTextStream 가 지원하는 다양한 텍스트 파일 형식에서 필요에 따라 사용되며, X11 환경에서는 로케일별 문자 입력 및 출력에 사용됩니다.
Qt에 다른 인코딩에 대한 지원을 추가하려면 QTextCodec의 서브클래스를 만들고 아래 표에 나열된 함수를 구현하십시오.
| 함수 | 설명 |
|---|---|
| name() | 인코딩의 공식 이름을 반환합니다. 인코딩이 IANA 문자 집합 인코딩 파일에 나열되어 있는 경우, 이름은 해당 인코딩에 대해 선호되는 MIME 이름이어야 합니다. |
| aliases() | 인코딩의 대체 이름 목록을 반환합니다. QTextCodec은 빈 목록을 반환하는 기본 구현을 제공합니다. 예를 들어, "ISO-8859-1"의 별칭으로는 "latin1", "CP819", "IBM819" 및 "iso-ir-100"이 있습니다. |
| mibEnum() | IANA 문자 집합 인코딩 파일에 해당 인코딩이 나열되어 있는 경우, 해당 인코딩에 대한 MIB 열거형을 반환합니다. |
| convertToUnicode() | 8비트 문자열을 유니코드로 변환합니다. |
| convertFromUnicode()해당 인코딩에 대한 MIB 열거형을 반환합니다(IANA 문자 집합 인코딩 | 유니코드 문자열을 8비트 문자열로 변환합니다. |
QTextStream, QTextDecoder 및 QTextEncoder도 참조하십시오 .
멤버 함수 설명서
[protected] QTextCodec::QTextCodec()
QTextCodec 객체를 생성하고, 이 객체에 가장 높은 우선순위를 부여합니다. QTextCodec은 항상 힙에 생성되어야 합니다(즉, ` new`를 사용하여). Qt가 소유권을 인수하며, 애플리케이션이 종료될 때 이를 삭제합니다.
[virtual noexcept protected] QTextCodec::~QTextCodec()
QTextCodec 를 파기합니다. 코덱은 직접 삭제해서는 안 됩니다. 일단 생성되면 Qt가 관리할 책임이 있습니다.
경고: 이 함수는 재진입 가능하지 않습니다.
[virtual] QList<QByteArray> QTextCodec::aliases() const
하위 클래스는 해당 코덱에 대한 여러 개의 별칭을 반환할 수 있습니다.
코덱에 대한 표준 별칭은 IANA 문자 집합 인코딩 파일에서 확인할 수 있습니다.
[static] QList<QByteArray> QTextCodec::availableCodecs()
사용 가능한 모든 코덱의 목록을 이름별로 반환합니다. 해당 이름에 대한 ‘ QTextCodec ’를 얻으려면 ` QTextCodec::codecForName()`를 호출하십시오.
코덱에 별칭이 있는 경우, 목록에 동일한 코덱이 여러 번 포함될 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
availableMibs(), name(), aliases()도 참조하십시오 .
[static] QList<int> QTextCodec::availableMibs()
사용 가능한 모든 코덱에 대한 MIB 목록을 반환합니다. MIB의 QTextCodec 를 얻으려면 ` QTextCodec::codecForMib()`를 호출하십시오.
참고: 이 함수는 스레드 안전합니다.
availableCodecs() 및 mibEnum()도 참조하십시오 .
bool QTextCodec::canEncode(QChar ch) const
Unicode 문자 ch 가 이 코덱으로 완전히 인코딩될 수 있는 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
bool QTextCodec::canEncode(QStringView s) const
유니코드 문자열 s 이 이 코덱으로 완전히 인코딩될 수 있는 경우 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.
참고: 입력 크기가 INT_MAX 을 초과하는경우 , 이 함수는 어떠한 검사도 수행하지 않고 false 을 반환합니다.
이 함수는 오버로드된 함수입니다.
bool QTextCodec::canEncode(const QString &s) const
s 인코딩 가능 여부를 테스트할 문자열을 포함합니다.
참고: 입력 크기가 INT_MAX 를 초과하는경우 , 이 함수는 어떠한 검사도 수행하지 않고 false 를 반환합니다.
이 함수는 오버로드된 함수입니다.
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
주어진 바이트 배열( ba) 내의 HTML 스니펫에 대한 인코딩을 BOM(Byte Order Mark) 및 콘텐츠 유형 메타 헤더를 확인하여 감지하고, 해당 HTML을 유니코드로 디코딩할 수 있는 QTextCodec 인스턴스를 반환합니다. 제공된 콘텐츠에서 인코딩을 감지할 수 없는 경우, defaultCodec 가 반환됩니다.
codecForUtfText()도 참조하십시오 .
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)
주어진 바이트 배열 ba 에 포함된 HTML 스니펫의 인코딩을 BOM(Byte Order Mark)과 content-type 메타 헤더를 확인하여 감지하고, 해당 HTML을 유니코드로 디코딩할 수 있는 ` QTextCodec ` 인스턴스를 반환합니다. 인코딩을 감지할 수 없는 경우, 이 오버로드 메서드는 `Latin-1` 인코딩의 ` QTextCodec`을 반환합니다.
이 함수는 오버로드된 함수입니다.
[static] QTextCodec *QTextCodec::codecForLocale()
이 로케일에 가장 적합한 코덱에 대한 포인터를 반환합니다.
해당 백엔드가 사용 중인 경우 코덱은 ICU에서 가져오며, 그렇지 않은 경우 OS별 API를 통해 얻을 수 있습니다. 후자의 경우 코덱의 이름은 "System"일 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
setCodecForLocale()도 참조하십시오 .
[static] QTextCodec *QTextCodec::codecForMib(int mib)
MIBenum mib 와 일치하는 QTextCodec 를 반환합니다.
참고: 이 함수는 스레드 안전합니다.
[static] QTextCodec *QTextCodec::codecForName(const QByteArray &name)
설치된 모든 ` QTextCodec ` 객체를 검색하여 ` name`과 가장 잘 일치하는 객체를 반환합니다. 일치 여부는 대소문자를 구분하지 않습니다. ` name `이라는 이름과 일치하는 코덱을 찾을 수 없는 경우 ` nullptr `을 반환합니다.
참고: 이 함수는 스레드 안전합니다.
[static] QTextCodec *QTextCodec::codecForName(const char *name)
설치된 모든 QTextCodec 객체를 검색하여 name 과 가장 잘 일치하는 객체를 반환합니다. 일치 여부는 대소문자를 구분하지 않습니다. name 와 일치하는 코덱을 찾을 수 없는 경우 nullptr 를 반환합니다.
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)
BOM(바이트 순서 표시)을 사용하여 제공된 스니펫 ba 의 인코딩을 감지하고, 해당 텍스트를 유니코드로 디코딩할 수 있는 ` QTextCodec ` 인스턴스를 반환합니다. 이 함수는 다음 코덱 중 하나를 감지할 수 있습니다:
- UTF-32 리틀 엔디안
- UTF-32 빅 엔디안
- UTF-16 리틀 엔디안
- UTF-16 빅 엔디안
- UTF-8
제공된 콘텐츠에서 코덱을 감지할 수 없는 경우, ` defaultCodec `가 반환됩니다.
codecForHtml()도 참조하십시오 .
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)
BOM(바이트 순서 표시)을 사용하여 제공된 스니펫 ba 의 인코딩을 감지하고, 해당 텍스트를 유니코드로 디코딩할 수 있는 QTextCodec 인스턴스를 반환합니다. 이 함수는 다음 코덱 중 하나를 감지할 수 있습니다:
- UTF-32 리틀 엔디안
- UTF-32 빅 엔디안
- UTF-16 리틀 엔디안
- UTF-16 빅 엔디안
- UTF-8
제공된 콘텐츠에서 코덱을 감지할 수 없는 경우, 이 오버로드 함수는 Latin-1 QTextCodec 를 반환합니다.
이 함수는 오버로드된 함수입니다.
codecForHtml()도 참조하십시오 .
[pure virtual protected] QByteArray QTextCodec::convertFromUnicode(const QChar *input, int number, int *state) const
QTextCodec 하위 클래스는 이 함수를 재구현해야 합니다.
input 배열의 첫 번째 number 개 문자를 유니코드에서 서브클래스의 인코딩으로 변환하고, 그 결과를 QByteArray 에 담아 반환합니다.
state nullptr 일 수 있으며, 이 경우 변환은 상태를 갖지 않으며 기본 변환 규칙을 사용해야 합니다. 가 가 아닌 경우, 코덱은 변환 후 상태를 에 저장하고, struct의 및 멤버를 조정해야 합니다. state nullptr state remainingChars invalidChars
[pure virtual protected] QString QTextCodec::convertToUnicode(const char *chars, int len, int *state) const
QTextCodec 하위 클래스는 이 함수를 재구현해야 합니다.
chars 의 처음 len 문자를 서브클래스의 인코딩에서 유니코드로 변환하고, 그 결과를 QString 로 반환합니다.
state nullptr 일 수 있으며, 이 경우 변환은 상태를 유지하지 않으며 기본 변환 규칙을 사용해야 합니다. 가 가 아닌 경우, 코덱은 변환 후 상태를 에 저장하고, struct의 및 멤버를 조정해야 합니다. state nullptr state remainingChars invalidChars
QByteArray QTextCodec::fromUnicode(const QString &str) const
str 를 유니코드에서 이 코덱의 인코딩으로 변환하고, 그 결과를 QByteArray 로 반환합니다.
참고: 입력 길이가 INT_MAX 을 초과하는경우 , 이 함수는 변환을 수행하지 않고 빈 QByteArray 을 반환합니다. 더 긴 입력의 경우, ConverterState를 받는 오버로드를 사용하여 호출 측에서 청크 처리를 구현하십시오.
QByteArray QTextCodec::fromUnicode(const QChar *input, int number, int *state = nullptr) const
input 배열의 앞쪽 number 개의 문자를 유니코드에서 이 코덱의 인코딩으로 변환하고, 그 결과를 QByteArray 에 반환합니다.
사용된 변환기의 state 가 업데이트됩니다.
QByteArray QTextCodec::fromUnicode(QStringView str) const
str 를 유니코드에서 이 코덱의 인코딩으로 변환하고, 그 결과를 QByteArray 에 담아 반환합니다.
참고: 입력 길이가 ` INT_MAX`을 초과하는경우 , 이 함수는 변환을 수행하지 않고 빈 ` QByteArray`을 반환합니다. 더 긴 입력의 경우, `ConverterState`를 인수로 받는 오버로드된 함수를 사용하여 호출 측에서 청크 처리를 구현해야 합니다.
이 함수는 오버로드된 함수입니다.
QTextDecoder *QTextCodec::makeDecoder(int flags = DefaultConversion) const
지정된 flags 를 사용하여 QTextDecoder 를 생성하고, char * 데이터 청크를 디코딩하여 유니코드 데이터 청크를 생성합니다.
반환된 객체를 삭제하는 것은 호출자의 책임입니다.
QTextEncoder *QTextCodec::makeEncoder(int flags = DefaultConversion) const
지정된 flags 를 사용하여 유니코드 데이터 청크를 char * 데이터로 인코딩하는 QTextEncoder 를 생성합니다.
반환된 객체를 삭제하는 것은 호출자의 책임입니다.
[pure virtual] int QTextCodec::mibEnum() const
QTextCodec 의 하위 클래스는 이 함수를 재구현해야 합니다. 이 함수는 MIBenum을 반환합니다(자세한 내용은 IANA 문자 집합 인코딩 파일을 참조하십시오). 각 QTextCodec 하위 클래스가 이 함수에 대해 올바르고 고유한 값을 반환하는 것이 중요합니다.
[pure virtual] QByteArray QTextCodec::name() const
QTextCodec 파생 클래스는 이 함수를 재구현해야 합니다. 이 함수는 파생 클래스가 지원하는 인코딩의 이름을 반환합니다.
코덱이 IANA 문자 집합 인코딩 파일에 문자 집합으로 등록되어 있는 경우, 이 메서드는 정의되어 있다면 해당 코덱에 대한 선호 MIME 이름을 반환해야 하며, 그렇지 않은 경우 코덱의 이름을 반환해야 합니다.
[static] void QTextCodec::setCodecForLocale(QTextCodec *c)
코덱을 ` c`로 설정합니다. 이는 ` codecForLocale()` 함수에서 반환됩니다. ` c `가 ` nullptr`인 경우, 코덱은 기본값으로 재설정됩니다.
로케일을 설정하기 위해 자체 메커니즘을 사용하려는 일부 애플리케이션에서는 이 설정이 필요할 수 있습니다.
경고: 이 함수는 재진입 가능하지 않습니다.
codecForLocale()도 참조하십시오 .
QString QTextCodec::toUnicode(const QByteArray &a) const
a 를 이 코덱의 인코딩에서 유니코드로 변환하고, 그 결과를 QString 에 담아 반환합니다.
참고: 입력 길이가 ` INT_MAX`을 초과하는경우 , 이 함수는 변환을 수행하지 않고 빈 ` QString`을 반환합니다. 더 긴 입력의 경우, `ConverterState`를 받는 오버로드를 사용하여 호출 측에서 청크 처리를 구현하십시오.
QString QTextCodec::toUnicode(const char *input, int size, int *state = nullptr) const
input 의 첫 번째 size 자리를 이 코덱의 인코딩에서 유니코드로 변환하고, 그 결과를 QString 로 반환합니다.
사용된 변환기의 state 값이 업데이트됩니다.
QString QTextCodec::toUnicode(const char *chars) const
chars 소스 문자를 포함합니다.
참고: 입력 길이가 ` INT_MAX`를 초과하는경우 , 이 함수는 어떠한 변환도 수행하지 않고 빈 ` QString`를 반환합니다. 더 긴 입력의 경우, `ConverterState`를 받는 오버로드 버전을 사용하여 호출 측에서 청크 처리를 구현하십시오.
이 함수는 오버로드된 함수입니다.
© 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.