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, 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 は文字列の保存、描画、操作に Unicode を使用します。多くの場面で、異なるエンコーディングを使用するデータを扱いたいと思うかもしれません。例えば、ほとんどの日本語ドキュメントはまだ Shift-JIS や ISO 2022-JP で保存されていますし、ロシア語ユーザのドキュメントは KOI8-R や Windows-1251 で保存されています。

QtはQTextCodecクラスのセットを提供し、Unicode以外のフォーマットのUnicodeへの変換を手助けします。また、独自のコーデッククラスを作成することもできます。

サポートされているエンコーディングは

  • 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まで
  • Isci-Bng、Dev、Gjr、Knd、Mlm、Ori、Pnj、Tlg、Tml
  • KOI8-R
  • KOI8-U
  • マッキントッシュ
  • シフトJIS
  • TIS-620
  • TSCII
  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • Windows-1250~1258

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

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

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

この後、string はユニコードに変換されたテキストを保持します。文字列を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 character-sets encoding file にリストされている場合、その名前はそのエンコーディングの好ましい MIME 名でなければなりません。
aliases()エンコーディングの代替名のリストを返します。QTextCodec は、空のリストを返すデフォルトの実装を提供します。例えば、"ISO-8859-1" は "latin1", "CP819", "IBM819", "iso-ir-100" をエイリアスとして持っています。
mibEnum()そのエンコーディングがIANA character-sets encoding ファイルに記載されている場合は、そのエンコーディングの MIB enum を返します。
convertToUnicode()8 ビット文字列を Unicode に変換します。
convertFromUnicode()() Unicode 文字列を 8 ビット文字列に変換します。

QTextStreamQTextDecoder 、およびQTextEncoderも参照してください

メンバ型ドキュメント

[alias] QTextCodec::ConversionFlags

定数説明
DefaultConversionフラグは設定されない。
ConvertInvalidToNullこのフラグが設定されている場合、各無効な入力文字はヌル文字として出力されます。
IgnoreHeaderUnicodeのバイトオーダマークは無視され、何も生成されません。

[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 を取得するには、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

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

Unicode 文字列s がこのコーデックで完全にエンコードできる場合はtrue を返し、そうでない場合はfalse を返します。

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

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

s には、エンコード可能かどうかテストされる文字列が格納されます。

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

BOM (Byte Order Mark) と content-type メタヘッダをチェックして、指定されたバイト配列ba に含まれる HTML のスニペットのエンコーディングを検出し、html を unicode にデコードできるQTextCodec インスタンスを返します。提供されたコンテンツからコーデックが検出できない場合は、defaultCodec が返される。

codecForUtfText()も参照

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

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

BOM (Byte Order Mark) と content-type メタヘッダをチェックすることで、指定されたバイト配列ba に含まれる HTML のスニペットのエンコーディングを検出し、 html を unicode にデコードできるQTextCodec インスタンスを返します。コーデックが検出できない場合、このオーバーロードは Latin-1QTextCodec を返す。

[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 (Byte Order Mark) を使って検出し、テキストをユニコードにデコードできるQTextCodec インスタンスを返します。この関数は、以下のコーデックのいずれかを検出することができます:

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

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

codecForHtml()も参照

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

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

提供されたスニペットba のエンコーディングを BOM (Byte Order Mark) を使って検出し、テキストをユニコードにデコードできるQTextCodec インスタンスを返します。この関数は、以下のコーデックのいずれかを検出することができます:

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

提供されたコンテンツからコーデックが検出できない場合、このオーバーロードは Latin-1QTextCodec を返します。

codecForHtml()も参照

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

QTextCodec サブクラスはこの関数を再実装する必要があります。

input 配列から最初のnumber 文字を Unicode からサブクラスのエンコーディングに変換し、結果をQByteArray で返します。

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

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

QTextCodec サブクラスはこの関数を再実装する必要があります。

chars の最初のlen 文字をサブクラスのエンコーディングから Unicode に変換し、結果をQString で返します。

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

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

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

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

input 配列から最初のnumber の文字を、Unicode からこのコーデックのエンコーディングに変換し、結果をQByteArray で返します。

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

QByteArray QTextCodec::fromUnicode(QStringView str) const

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

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

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

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

返されたオブジェクトを削除するのは呼び出し側の責任です。

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

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

返されたオブジェクトを削除するのは呼び出し側の責任です。

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

QTextCodec のサブクラスは、この関数を再実装する必要があります。この関数は MIBenum を返します(詳細についてはIANA character-sets encoding file を参照してください)。QTextCodec の各サブクラスは、この関数に対して正しい一意の値を返すことが重要です。

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

QTextCodec サブクラスはこの関数を再実装しなければならない。この関数はサブクラスがサポートするエンコーディングの名前を返します。

コーデックがIANA character-sets encoding ファイルに文字セットとして登録されている場合、このメソッドはコーデックに望ましい MIME 名が定義されていればそれを返し、そうでなければその名前を返します。

[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 文字を Unicode に変換し、結果を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.