📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

267行目: 267行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>
== 文字エンコード ==
==== Shift-JISからUTF-8へ変換 ====
<code>QTextCodec</code>クラスは、様々な文字エンコード間での文字列の変換をサポートしている。<br>
<br>
以下の例では、<code>QString</code>クラスに格納されている文字列がShift-JISであると仮定しているが、実際には<code>QString</code>クラスは内部的にUTF-16を使用している。<br>
したがって、本来変換が必要なものは、外部から入力されるShift-JISでエンコードされたデータ (例: ファイルやネットワーク経由で受信したデータ) を扱う場合である。<br>
<br>
そのため、実務等で使用する場合は、外部データを<code>QByteArray</code>クラスで受け取り、それを<code>QString</code>クラスに変換する時にエンコーディングを考慮する必要がある。<br>
<syntaxhighlight lang="c++">
// Shift-JISでエンコードされた文字列
QString SJISText = QStringLiteral("こんにちは");  // Shift-JISでエンコードされた文字列
// Shift-JISのコーデックを取得
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
// Shift-JISのQByteArrayに変換
QByteArray shiftJISBytes = codec->fromUnicode(SJISText);
// UTF-8の文字列に変換
QString utf8String = QString::fromUtf8(shiftJISBytes);
</syntaxhighlight>
<br>
==== UTF-8からShift-JISへ変換 ====
以下の例では、<code>QTextCodec::codecForName("Shift-JIS")</code>でShift-JISのQTextCodecオブジェクトを取得して、<br>
<code>fromUnicode</code>メソッドを使用してUTF-8エンコードされた<code>QString</code>クラスをShift-JISエンコードされた<code>QByteArray</code>クラスに変換している。<br>
<br>
<code>QByteArray</code>クラスはバイナリデータを表すため、この変換により得られたバイト配列をファイルやネットワーク経由で送信する時にShift-JISとして扱うことができる。<br>
<br>
ただし、変換プロセス中に文字の損失や変換できない文字がある場合、<code>QTextCodec</code>クラスはデフォルトでその文字を<code>?</code>に置換、あるいは、無視する設定がある。<br>
変換の精度を高めるためには、<code>QTextCodec::ConverterOptions</code>を使用して、変換の挙動を細かく制御することが重要である。<br>
<syntaxhighlight lang="c++">
// UTF-8でエンコードされた文字列
QString utf8Text = QStringLiteral("こんにちは");
// Shift-JISのコーデックを取得
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
// UTF-8のQStringをShift-JISのQByteArrayに変換
QByteArray shiftJISBytes = codec->fromUnicode(utf8Text);
</syntaxhighlight>
<br>
==== UTF-8からEUC-JPへ変換 ====
<syntaxhighlight lang="c++">
// UTF-8でエンコードされた文字列
QString utf8Text = QStringLiteral("こんにちは");
// EUC-JPのコーデックを取得
QTextCodec *codec = QTextCodec::codecForName("EUC-JP");
// UTF-8の文字列をEUC-JPのQByteArrayに変換
QByteArray eucJPBytes = codec->fromUnicode(utf8String);
// EUC-JPエンコードされたデータを16進数で表示
std::cout << eucJPText.toHex() << std::endl;
</syntaxhighlight>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]