QTextCodec Class

QTextCodec 클래스는 텍스트 인코딩 간의 변환을 제공합니다. 더 보기...

Header: #include <QTextCodec>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake: QT += core5compat

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

참고: 이 함수는 스레드 안전합니다:

공용 형

공용 함수

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, QTextCodec::ConverterState *state = nullptr) const
QByteArray fromUnicode(QStringView str) const
QTextDecoder *makeDecoder(QTextCodec::ConversionFlags flags = DefaultConversion) const
QTextEncoder *makeEncoder(QTextCodec::ConversionFlags 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, QTextCodec::ConverterState *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, QTextCodec::ConverterState *state) const = 0
virtual QString convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *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
  • Macintosh
  • Shift-JIS
  • TIS-620
  • TSCII
  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • Windows-1250 ~ 1258

ICU 지원을 활성화한 상태에서 Qt를 컴파일하면, ICU에서 지원하는 대부분의 코덱도 응용 프로그램에서 사용할 수 있습니다.

QTextCodec를 다음과 같이 사용하여 로컬로 인코딩된 문자열을 유니코드로 변환할 수 있습니다. 러시아어 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()유니코드 문자열을 8비트 문자열로 변환합니다.

QTextStream, QTextDecoder, QTextEncoder참조하세요 .

멤버 유형 문서

[alias] QTextCodec::ConversionFlags

상수설명
DefaultConversion플래그가 설정되지 않았습니다.
ConvertInvalidToNull이 플래그를 설정하면 유효하지 않은 각 입력 문자가 null 문자로 출력됩니다.
IgnoreHeader유니코드 바이트 순서 표시를 무시하고 생성하지 않습니다.

[alias] QTextCodec::ConverterState

멤버 기능 문서

[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::codecForName ()를 호출하여 QTextCodec 에서 이름을 가져옵니다.

코덱에 별칭이 있는 경우 목록에 동일한 코덱에 대한 언급이 많이 포함될 수 있습니다.

참고: 이 함수는 스레드에 안전합니다.

availableMibs(), name() 및 aliases()도 참조하세요 .

[static] QList<int> QTextCodec::availableMibs()

사용 가능한 모든 코덱에 대한 MIB 목록을 반환합니다. QTextCodec::codecForMib ()를 호출하여 QTextCodec MIB를 가져옵니다.

참고: 이 함수는 스레드에 안전합니다.

availableCodecs() 및 mibEnum()도 참조하세요 .

bool QTextCodec::canEncode(QChar ch) const

유니코드 문자 ch 를 이 코덱으로 완전히 인코딩할 수 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

bool QTextCodec::canEncode(QStringView s) const

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

유니코드 문자열 s 을 이 코덱으로 완전히 인코딩할 수 있으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

bool QTextCodec::canEncode(const QString &s) const

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

s 인코딩 가능 여부를 테스트하는 문자열을 포함합니다.

[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)

주어진 바이트 배열( ba)에서 제공된 HTML 스니펫의 인코딩을 감지하기 위해 BOM(바이트 순서 표시)과 콘텐츠 유형 메타 헤더를 확인하여 해당 HTML을 유니코드로 디코딩할 수 있는 QTextCodec 인스턴스를 반환합니다. 제공된 콘텐츠에서 코덱을 감지할 수 없는 경우 defaultCodec 이 반환됩니다.

codecForUtfText()도 참조하세요 .

[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)

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

주어진 바이트 배열에서 제공된 HTML 스니펫의 인코딩을 감지하려고 시도합니다( ba, BOM(바이트 순서 표시)과 콘텐츠 유형 메타 헤더를 확인하여 html을 유니코드로 디코딩할 수 있는 QTextCodec 인스턴스를 반환합니다. 코덱을 감지할 수 없는 경우 이 오버로드는 라틴-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)

제공된 스니펫 ba 의 인코딩을 BOM(바이트 순서 표시)을 사용하여 감지하고 텍스트를 유니코드로 디코딩할 수 있는 QTextCodec 인스턴스를 반환합니다. 이 함수는 다음 코덱 중 하나를 감지할 수 있습니다:

  • UTF-32 리틀 엔디안
  • UTF-32 빅 엔디안
  • UTF-16 리틀 엔디안
  • UTF-16 빅 엔디안
  • UTF-8

제공된 콘텐츠에서 코덱을 감지할 수 없는 경우 defaultCodec 이 반환됩니다.

codecForHtml()도 참조하세요 .

[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)

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

제공된 스니펫 ba 의 인코딩을 BOM(바이트 순서 표시)을 사용하여 감지하고 텍스트를 유니코드로 디코딩할 수 있는 QTextCodec 인스턴스를 반환합니다. 이 함수는 다음 코덱 중 하나를 감지할 수 있습니다:

  • UTF-32 리틀 엔디안
  • UTF-32 빅 엔디안
  • UTF-16 리틀 엔디안
  • UTF-16 빅 엔디안
  • UTF-8

제공된 콘텐츠에서 코덱을 감지할 수 없는 경우 이 오버로드는 라틴-1 QTextCodec 을 반환합니다.

codecForHtml()도 참조하세요 .

[pure virtual protected] QByteArray QTextCodec::convertFromUnicode(const QChar *input, int number, QTextCodec::ConverterState *state) const

QTextCodec 서브클래스는 이 함수를 재구현해야 합니다.

input 배열의 첫 번째 number 문자를 유니코드에서 하위 클래스의 인코딩으로 변환하고 결과를 QByteArray 로 반환합니다.

statenullptr 일 수 있으며, 이 경우 변환은 상태가 없으며 기본 변환 규칙을 사용해야 합니다. statenullptr 이 아닌 경우 코덱은 변환 후 상태를 state 에 저장하고 구조체의 remainingCharsinvalidChars 멤버를 조정해야 합니다.

[pure virtual protected] QString QTextCodec::convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state) const

QTextCodec 서브클래스는 이 함수를 재구현해야 합니다.

chars 의 첫 번째 len 문자를 서브클래스의 인코딩에서 유니코드로 변환하고 결과를 QString 로 반환합니다.

statenullptr 일 수 있으며, 이 경우 변환은 상태 비저장이며 기본 변환 규칙을 사용해야 합니다. statenullptr 이 아닌 경우 코덱은 변환 후 상태를 state 에 저장하고 구조체의 remainingCharsinvalidChars 멤버를 조정해야 합니다.

QByteArray QTextCodec::fromUnicode(const QString &str) const

str 를 유니코드에서 이 코덱의 인코딩으로 변환하고 그 결과를 QByteArray 로 반환합니다.

QByteArray QTextCodec::fromUnicode(const QChar *input, int number, QTextCodec::ConverterState *state = nullptr) const

input 배열의 첫 번째 number 문자를 유니코드에서 이 코덱의 인코딩으로 변환하고 그 결과를 QByteArray 로 반환합니다.

사용된 변환기의 state 가 업데이트됩니다.

QByteArray QTextCodec::fromUnicode(QStringView str) const

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

str 을 유니코드에서 이 코덱의 인코딩으로 변환하고 그 결과를 QByteArray 으로 반환합니다.

QTextDecoder *QTextCodec::makeDecoder(QTextCodec::ConversionFlags flags = DefaultConversion) const

지정된 flags 을 사용하여 char * 데이터 청크를 디코딩하여 유니코드 데이터 청크를 생성하는 QTextDecoder 을 생성합니다.

호출자는 반환된 객체를 삭제할 책임이 있습니다.

QTextEncoder *QTextCodec::makeEncoder(QTextCodec::ConversionFlags flags = DefaultConversion) const

유니코드 데이터 청크를 char * 데이터로 인코딩하기 위해 지정된 flags 을 사용하여 QTextEncoder 을 생성합니다.

호출자는 반환된 객체를 삭제할 책임이 있습니다.

[pure virtual] int QTextCodec::mibEnum() const

QTextCodec 의 서브클래스는 이 함수를 재구현해야 합니다. 이 함수는 MIBenum을 반환합니다(자세한 내용은 IANA 문자 집합 인코딩 파일 참조). 각 QTextCodec 서브클래스가 이 함수에 대해 올바른 고유 값을 반환하는 것이 중요합니다.

[pure virtual] QByteArray QTextCodec::name() const

QTextCodec 서브클래스는 이 함수를 재구현해야 합니다. 서브 클래스가 지원하는 인코딩의 이름을 반환합니다.

코덱이 IANA 문자 집합 인코딩 파일에 문자 집합으로 등록된 경우 이 메서드는 정의된 경우 코덱에 대해 기본 설정된 밈 이름을 반환하고, 그렇지 않으면 그 이름을 반환해야 합니다.

[static] void QTextCodec::setCodecForLocale(QTextCodec *c)

코덱을 c 으로 설정하면 codecForLocale()이 반환합니다. cnullptr 인 경우 코덱이 기본값으로 재설정됩니다.

로캘을 설정하기 위해 자체 메커니즘을 사용하려는 일부 애플리케이션의 경우 이 설정이 필요할 수 있습니다.

경고: 이 함수는 재입력되지 않습니다.

codecForLocale()도 참조하세요 .

QString QTextCodec::toUnicode(const QByteArray &a) const

이 코덱의 인코딩에서 a 을 유니코드로 변환하고 그 결과를 QString 로 반환합니다.

QString QTextCodec::toUnicode(const char *input, int size, QTextCodec::ConverterState *state = nullptr) const

이 코덱의 인코딩에서 input 의 첫 번째 size 문자를 유니코드로 변환하고 결과를 QString 로 반환합니다.

사용된 변환기의 state 가 업데이트됩니다.

QString QTextCodec::toUnicode(const char *chars) const

이것은 과부하된 함수입니다.

chars 에는 소스 문자가 포함됩니다.

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