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

QtはQTextCodecクラスのセットを提供し、Unicode以外のフォーマットを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 character-sets encoding file にあります。

[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(バイトオーダーマーク)とcontent-typeメタヘッダをチェックすることによって、与えられたバイト配列ba 、提供されたHTMLのスニペットのエンコーディングを検出しようとし、ユニコードにhtmlをデコードすることができる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) を使って検出し、テキストを unicode にデコードできる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) を使って検出し、テキストを unicode にデコードできる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 データのチャンクを作成するために、指定されたflagsQTextDecoder を作成します。

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

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 を Unicode に変換し、その結果を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 にはソース文字が含まれます。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。