📢 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]] | ||