QStringConverter Class
QStringConverter クラスは、テキストのエンコードおよびデコードを行うための基底クラスを提供します。詳細...
| ヘッダー: | #include <QStringConverter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QStringConverter は、文字列データ用のクラスの一部です。
注:このクラスのすべての関数は再入可能です。
パブリック型
(since 6.11) struct | FinalizeResultChar |
| enum | Encoding { Utf8, Utf16, Utf16BE, Utf16LE, Utf32, …, System } |
| enum class | FinalizeResultError { NoError, InvalidCharacters, NotEnoughSpace } |
| enum class | Flag { Default, ConvertInvalidToNull, WriteBom, ConvertInitialBom, Stateless } |
| flags | Flags |
パブリック関数
| QStringConverter(QStringConverter &&) | |
| bool | hasError() const |
| bool | isValid() const |
| const char * | name() const |
| void | resetState() |
| QStringConverter & | operator=(QStringConverter &&) |
静的パブリックメンバー
| QStringList | availableCodecs() |
| std::optional<QStringConverter::Encoding> | encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0) |
| std::optional<QStringConverter::Encoding> | encodingForHtml(QByteArrayView data) |
| std::optional<QStringConverter::Encoding> | encodingForName(QAnyStringView name) |
| const char * | nameForEncoding(QStringConverter::Encoding e) |
保護された関数
詳細な説明
Qt では、文字列の保存、描画、および操作に UTF-16 を使用しています。多くの状況において、異なるエンコーディングを使用するデータを扱う必要がある場合があります。ファイルやネットワーク接続を介して転送されるテキストデータのほとんどは、UTF-8 でエンコードされています。
QStringConverter クラスは、異なるテキストエンコーディング間の変換を支援するQStringEncoder およびQStringDecoder クラスの基底クラスです。QStringDecoder は、エンコードされた表現から文字列を、Qtが内部で使用する形式であるUTF-16にデコードすることができます。QStringEncoder は逆の操作を行い、UTF-16でエンコードされたデータ(通常はQString の形式)を、指定されたエンコーディングにエンコードします。
以下のエンコーディングは常にサポートされています:
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- UTF-32BE
- UTF-32LE
- ISO-8859-1 (Latin-1)
- システムのエンコーディング
QStringConverterは、Qtのコンパイル方法によっては、さらに多くのエンコーディングをサポートしている場合があります。サポートされているコーデックがさらにある場合は、availableCodecs() を使用してそれらを一覧表示できます。
QStringConverters は、次のようにして、エンコードされた文字列を UTF-16 との間で変換するために使用できます。
UTF-8 でエンコードされた文字列があり、それをQString に変換したいとします。これを行う簡単な方法は、次のように `QStringDecoder ` を使用することです。
QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
QString string = toUtf16(encodedString);これにより、string にはデコードされた形式のテキストが格納されます。Unicodeからローカルエンコーディングへの文字列変換も、QStringEncoder クラスを使えば同様に簡単に行えます:
QString string = "...";
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);
QByteArray encodedString = fromUtf16(string);さまざまなエンコーディングのテキストファイルを読み書きするには、QTextStream とそのsetEncoding() 関数を使用します。
ネットワーク経由でデータを受信する場合など、データをチャンク単位で変換する際には注意が必要です。そのような場合、マルチバイト文字が 2 つのチャンクに分割されてしまう可能性があります。最良の場合でも 1 文字が失われる可能性があり、最悪の場合、変換全体が失敗する原因となります。
QStringEncoder とQStringDecoder は、内部状態でこれを追跡することで、この処理を容易にします。したがって、次のチャンクのデータでエンコーダーまたはデコーダーを再度呼び出すだけで、データのエンコードまたはデコードが自動的に正しく継続されます:
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
QString string;
while (new_data_available() && !toUtf16.hasError()) {
QByteArray chunk = get_new_data();
string += toUtf16(chunk);
}
auto result = toUtf16.finalize();
if (result.error != QStringDecoder::FinalizeResult::Error::NoError) {
// Handle error
}QStringDecoder オブジェクトはチャンク間で状態を維持するため、マルチバイト文字がチャンク間にまたがって分割された場合でも正しく動作します。
QStringConverter オブジェクトは、内部状態があるためコピーすることはできませんが、移動することは可能です。
QTextStream 、QStringDecoder 、およびQStringEncoderも参照してください 。
メンバ型のドキュメント
enum QStringConverter::Encoding
| 定数 | 値 | 説明 |
|---|---|---|
QStringConverter::Utf8 | 0 | UTF-8 との変換コンバータを作成する |
QStringConverter::Utf16 | 1 | UTF-16 との相互変換を行うコンバータを作成します。デコード時には、先頭のバイト順マークによってバイト順が自動的に検出されます。バイト順マークが存在しない場合や、エンコード時には、システムのバイト順が想定されます。 |
QStringConverter::Utf16BE | 3 | ビッグエンディアンUTF-16との間で変換を行うコンバータを作成します。 |
QStringConverter::Utf16LE | 2 | リトルエンディアン UTF-16 との間で変換を行うコンバータを作成します。 |
QStringConverter::Utf32 | 4 | UTF-32 への、または UTF-32 からのコンバータを作成します。デコード時には、先頭のバイトオーダーマークによってバイト順が自動的に検出されます。バイトオーダーマークが存在しない場合、またはエンコード時には、システムのバイト順が想定されます。 |
QStringConverter::Utf32BE | 6 | ビッグエンディアン UTF-32 との間で変換を行うコンバータを作成します。 |
QStringConverter::Utf32LE | 5 | リトルエンディアン UTF-32 との間で変換を行うコンバータを作成します。 |
QStringConverter::Latin1 | 7 | ISO-8859-1 (Latin1) との間で変換を行うコンバータを作成します。 |
QStringConverter::System | 8 | オペレーティングシステムのロケールに内在するエンコーディングとの間で変換を行うコンバータを作成してください。Unix ベースのシステムでは、これは常に UTF-8 とみなされます。Windows では、ロケールのコードページとの間で変換が行われます。 |
enum class QStringConverter::FinalizeResultError
| 定数 | 値 | 説明 |
|---|---|---|
QStringConverter::FinalizeResultError::NoError | 0 | エラーなし。 |
QStringConverter::FinalizeResultError::InvalidCharacters | 1 | エンコーダは正常にファイナライズされましたが、ファイナライズ中、あるいはそれ以前に無効な文字が検出されました。 |
QStringConverter::FinalizeResultError::NotEnoughSpace | 2 | finalize() が成功しなかった場合は、バッファを拡張して、再度 finalize() を呼び出す必要があります。 |
enum class QStringConverter::Flag
flags QStringConverter::Flags
| 定数 | 値 | 説明 |
|---|---|---|
QStringConverter::Flag::Default | 0 | デフォルトの変換ルールが適用されます。 |
QStringConverter::Flag::ConvertInvalidToNull | 0x2 | このフラグが設定されている場合、無効な入力文字はそれぞれヌル文字として出力されます。設定されていない場合、無効な入力文字は、出力エンコーディングがその文字を表現できる場合は `QChar::ReplacementCharacter ` として、そうでない場合は疑問符として表現されます。 |
QStringConverter::Flag::WriteBom | 0x4 | QString から出力エンコーディングへ変換する際、出力エンコーディングがサポートしている場合は、最初の文字として `QChar::ByteOrderMark ` を書き込みます。これは、UTF-8、UTF-16、および UTF-32 エンコーディングの場合に当てはまります。 |
QStringConverter::Flag::ConvertInitialBom | 0x8 | 入力エンコーディングからQString への変換時、QStringDecoder は通常、先頭のバイトオーダーマーク(QChar::ByteOrderMark )をスキップします。このフラグが設定されている場合、バイトオーダーマークはスキップされず、UTF-16に変換されて、生成されたQString の先頭に挿入されます。 |
QStringConverter::Flag::Stateless | 0x1 | 文字列のエンコードまたはデコードを行う異なる関数呼び出し間のコンバータの状態を無視します。これにより、不完全なデータシーケンスが検出された場合、QStringConverter がエラーを発生させるようになります。 |
Flags 型は、QFlags<Flag> の typedef です。Flag 値の論理和(OR)を格納します。
メンバ関数のドキュメント
[noexcept default] QStringConverter::QStringConverter(QStringConverter &&)
QStringConverter のインスタンスをMoveコンストラクタで生成します。
[noexcept protected default] QStringConverter::~QStringConverter()
QStringConverter のインスタンスを破棄します。
[static] QStringList QStringConverter::availableCodecs()
サポートされているコーデックの名前の一覧を返します。この関数が返す名前は、QStringEncoder やQStringDecoder のコンストラクタに渡すことで、指定されたコーデック用のエンコーダまたはデコーダを作成することができます。
この関数は、標準のコーデック以外の追加のコーデックの一覧を取得するために使用できます。追加のコーデックをサポートするには、QtをICUライブラリをサポートするようにコンパイルする必要があります。
注: コーデックの順序は 内部的な実装の詳細であり、安定しているとは保証されません。
[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)
data のコンテンツのエンコーディングが特定できる場合、そのエンコーディングを返します。エンコーディングの特定を補助するために、追加のヒントとして `expectedFirstCharacter ` を渡すことができます。
エンコーディングが不明な場合、返されるオプショナルは空になります。
[static] std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)
data 内の HTML のエンコーディングを、先頭のバイト順マークや HTML メタタグ内の文字セット指定子を確認して判定しようとします。オプションが空の場合、指定されたエンコーディングはQStringConverter ではサポートされていません。エンコーディングが検出されない場合、このメソッドは Utf8 を返します。
QStringDecoder::decoderForHtml()も参照してください 。
[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(QAnyStringView name)
name を、対応するEncoding メンバーが存在する場合、そのメンバーに変換します。
name が Encoding 列挙型にリストされているコーデックの名前でない場合、std::nullopt が返されます。ただし、Qt が ICU とともにビルドされており、ICU が指定された名前のコンバータを提供している場合は、そのような名前でもQStringConverter のコンストラクタによって受け入れられる可能性があります。
注: Qt 6.8 以前のバージョンでは 、この関数はconst char * のみを受け取り、その文字列は UTF-8 エンコードされていることが想定されていました。
[noexcept] bool QStringConverter::hasError() const
変換処理で文字を正しく変換できなかった場合、true を返します。これは、例えば無効な UTF-8 シーケンスがあった場合や、ターゲットエンコーディングの制限により文字を変換できない場合などに発生することがあります。
[noexcept] bool QStringConverter::isValid() const
これが、テキストのエンコードまたはデコードに使用できる有効な文字列コンバータである場合、true を返します。
デフォルトで生成された文字列コンバータや、サポートされていない名前で生成されたコンバータは有効ではありません。
[noexcept] const char *QStringConverter::name() const
このQStringConverter がエンコードまたはデコードできるエンコーディングの正規名を返します。コンバータが無効な場合はnullptrを返します。返される名前はUTF-8でエンコードされています。
isValid()も参照してください 。
[static noexcept] const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
エンコーディングの正規名を返します。e が不正な値の場合、e またはnullptr を返します。
注: Qt 6.10、6.9.1、6.8.4、または 6.5.9以前のバージョンでは 、無効な引数を指定してこの関数を呼び出すと、未定義の挙動が発生していました。上記の Qt バージョン以降では、代わりに nullptr を返すようになりました。
[noexcept] void QStringConverter::resetState()
コンバータの内部状態をリセットし、発生しているエラーや部分的な変換をクリアします。
[noexcept default] QStringConverter &QStringConverter::operator=(QStringConverter &&)
other をこのQStringConverter インスタンスに割り当てます。
© 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.