このページでは

QTextCodec Class

QTextCodec クラスは、テキストエンコーディング間の変換機能を提供します。詳細...

ヘッダー: #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, 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 では、文字列の保存、描画、および操作に Unicode を使用します。多くの場合、異なるエンコーディングを使用したデータを扱う必要が生じることがあります。たとえば、日本語の文書の多くは依然として Shift-JIS や ISO 2022-JP で保存されており、ロシア語のユーザーは KOI8-R や Windows-1251 で文書を保存していることがよくあります。

Qt には、非 Unicode 形式と Unicode 形式間の変換を支援する一連の 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

Qt が ICU サポートを有効にしてコンパイルされている場合、ICU がサポートするほとんどのコーデックがアプリケーションでも利用可能になります。

QTextCodecs を使用すると、ローカルエンコーディングでエンコードされた文字列を Unicode に変換できます。たとえば、ロシア語の KOI8-R エンコーディングでエンコードされた文字列があり、それを Unicode に変換したいとします。それを行う簡単な方法は次のとおりです。

QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);

これで、string にはUnicodeに変換されたテキストが格納されます。Unicodeからローカルエンコーディングへの文字列変換も同様に簡単です:

QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);

ネットワーク経由でデータを受信する場合など、データをチャンク単位で変換しようとする際には注意が必要です。そのような場合、マルチバイト文字が2つのチャンクに分割されてしまう可能性があります。最良の場合でも1文字が失われる可能性があり、最悪の場合、変換全体が失敗する原因となります。

このような状況で取るべきアプローチは、コーデック用の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 ビットの文字列を Unicode に変換します。
convertFromUnicode()IANA 文字セットエンコーディングファイルにリストされている場合、そのエンコーディングの MIB 列Unicode 文字列を 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::codecForName() を呼び出すと、その名前に対応するQTextCodec を取得できます。

コーデックにエイリアスがある場合、リストには同じコーデックが複数回含まれることがあります。

注: この関数はスレッドセーフです。

関連項目: 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

Unicode文字列 `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(バイト順マーク)およびコンテンツタイプ・メタヘッダーを確認することで検出しようと試み、そのHTMLをUnicodeにデコードできるQTextCodec インスタンスを返します。提供されたコンテンツからコーデックを検出できない場合は、defaultCodec が返されます。

codecForUtfText()も参照してください 。

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

指定されたバイト配列(ba )に含まれるHTMLスニペットのエンコーディングを、BOM(バイト順マーク)およびコンテンツタイプ・メタヘッダーを確認することで検出し、そのHTMLをUnicodeにデコードできる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 のエンコーディングを検出し、そのテキストをUnicodeにデコードできるQTextCodec インスタンスを返します。この関数は、以下のコーデックのいずれかを検出できます:

  • UTF-32 リトルエンディアン
  • UTF-32 ビッグエンディアン
  • UTF-16 リトルエンディアン
  • UTF-16 ビッグエンディアン
  • UTF-8

提供されたコンテンツからコーデックを検出できない場合、defaultCodec が返されます。

codecForHtml()も参照してください 。

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

BOM(バイト順マーク)を使用して、指定されたスニペットba のエンコーディングを検出し、そのテキストをUnicodeにデコードできる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 の文字を、Unicodeからサブクラスのエンコーディングに変換し、その結果を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 文字を、サブクラスのエンコーディングからUnicodeに変換し、結果をQString として返します。

state nullptr である場合、変換はステートレスとなり、デフォルトの変換ルールが使用されるべきです。 が でない場合、コーデックは変換後の状態を に保存し、struct の および メンバを調整する必要があります。state nullptr state remainingChars invalidChars

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

str を Unicode からこのコーデックのエンコーディングに変換し、結果をQByteArray に格納して返します。

注: 入力がINT_MAX を超える場合 、この関数は変換を行わず、空のQByteArray を返します。より長い入力については、ConverterStateを受け取るオーバーロードを使用して、呼び出し側でチャンキングを実装してください。

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

input 配列の先頭number 文字を、Unicodeからこのコーデックのエンコーディングに変換し、その結果をQByteArray に格納して返します。

使用されたコンバータのstate が更新されます。

QByteArray QTextCodec::fromUnicode(QStringView str) const

str を Unicode からこのコーデックのエンコーディングに変換し、結果をQByteArray に格納して返します。

注: 入力がINT_MAX を超える場合 、この関数は変換を行わず、空のQByteArray を返します。より長い入力については、ConverterStateを受け取るオーバーロードを使用して、呼び出し側でチャンキングを実装してください。

これはオーバーロードされた関数です。

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

指定されたflags を持つQTextDecoder を作成し、char * データのチャンクをデコードして、Unicodeデータのチャンクを生成します。

返されたオブジェクトの削除は、呼び出し元が行う必要があります。

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

指定されたflags を持つQTextEncoder を作成し、Unicodeデータのチャンクをchar * データとしてエンコードします。

返されたオブジェクトの削除は、呼び出し元が責任を持って行う必要があります。

[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 を、このコーデックのエンコーディングから Unicode に変換し、その結果をQString として返します。

注: 入力がINT_MAX を超える場合 、この関数は変換を行わず、空のQString を返します。より長い入力については、ConverterStateを受け取るオーバーロードを使用して、呼び出し側でチャンキングを実装してください。

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

input の先頭size 文字を、このコーデックのエンコーディングからUnicodeに変換し、その結果を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.