Qt 4中国語処理
1813 ワード
Qt 4中国語処理
Qt 4ではソースコードに直接中国語文字列を使用すると文字化けしが発生するので,この問題を解決するために符号化に関する知識をもっと理解しなければならない.
ここで主に言及する符号化はUTF-8,ISO-8859-1(別名latin 1)、GBK(下互換GB 2312)であり、これらの符号化の詳細については、自分で学ぶしかないが、ここではQt 4の中国語の問題をどのように解決するかだけを述べる.
Qt 4のデフォルト設定は次のとおりです.
Qt Creatorのソースファイルの符号化のデフォルトは、UTF-8です.ソースコードに直接書いた中国語文字列がUTF-8符号化であることを意味します.
Qt 4 QTextCodecクラスのデフォルト符号化は、latin 1;Qtは、QString、tr文字データの処理時にデフォルトlatin 1符号化されることを意味する.
以上の違いから、以下のようにコードを書くと、中国語が正常に表示されません.
中国語を正常に表示するには、上の2つを一致させなければなりません.
方法1:
処理するQString文字列の場合
fromUtf 8の役割は、引用符の文字列をUTF-8符号化から変換し、正常に表示することです.このように中国語の表示に成功する前提は、私たちのソースコードはUTF-8符号化であり、ソースコードがUTF-8符号化でなければ、もちろん正しく変換できないが、適切な関数を選択して変換することができるかもしれない.
方法2:(Qt 5で無効)
ここでsetCodecForCStringsの役割は、QStringを元のデフォルトlatin 1符号化から私たちが設定した符号化に変換することです(上記の例はUTF-8で、GBKなどの他の適切な符号化を選択することができます).
setCodecForTrは関数trのデフォルト設定を変更し、効果は上と同じです.
上に設定すると、引用符に中国語文字列を直接書き込むことができます.
上記の2つの方法の役割ドメインは異なり,1つの方法は関数fromUtf 8に含まれる文字列に対してのみ有効であるが,方法2の役割ドメインはより広く,もちろん他のプログラムモジュールの符号化にも影響を及ぼす可能性がある.
方法3:
インタフェースに表示される静的テキストについては、Qt言語家の方法で完成することができます.Qt言語家は中国語の問題を解決するために専門的に使われているわけではありませんが、効果的には方法ですが、漢字を表示するためだけの目的ではお勧めしません.詳しい使い方はここでは紹介しません.
以上の説明によれば、ネットワーク、外部コマンドの出力など、他のソースの中国語文字に対して、インタフェースに中国語で表示するには、文字列の符号化がQString処理の符号化と一致したり、互換性があるように適切な関数を選択するだけでよい.
Qt 4ではソースコードに直接中国語文字列を使用すると文字化けしが発生するので,この問題を解決するために符号化に関する知識をもっと理解しなければならない.
ここで主に言及する符号化はUTF-8,ISO-8859-1(別名latin 1)、GBK(下互換GB 2312)であり、これらの符号化の詳細については、自分で学ぶしかないが、ここではQt 4の中国語の問題をどのように解決するかだけを述べる.
Qt 4のデフォルト設定は次のとおりです.
Qt Creatorのソースファイルの符号化のデフォルトは、UTF-8です.ソースコードに直接書いた中国語文字列がUTF-8符号化であることを意味します.
Qt 4 QTextCodecクラスのデフォルト符号化は、latin 1;Qtは、QString、tr文字データの処理時にデフォルトlatin 1符号化されることを意味する.
以上の違いから、以下のようにコードを書くと、中国語が正常に表示されません.
qDebug() << " ";
ui->label->setText(" ");
中国語を正常に表示するには、上の2つを一致させなければなりません.
方法1:
処理するQString文字列の場合
qDebug() << QString::fromUtf8(" ");
ui->label->setText(QString::fromUtf8(" "));
fromUtf 8の役割は、引用符の文字列をUTF-8符号化から変換し、正常に表示することです.このように中国語の表示に成功する前提は、私たちのソースコードはUTF-8符号化であり、ソースコードがUTF-8符号化でなければ、もちろん正しく変換できないが、適切な関数を選択して変換することができるかもしれない.
方法2:(Qt 5で無効)
#include <QTextCodec>
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
ここでsetCodecForCStringsの役割は、QStringを元のデフォルトlatin 1符号化から私たちが設定した符号化に変換することです(上記の例はUTF-8で、GBKなどの他の適切な符号化を選択することができます).
setCodecForTrは関数trのデフォルト設定を変更し、効果は上と同じです.
上に設定すると、引用符に中国語文字列を直接書き込むことができます.
上記の2つの方法の役割ドメインは異なり,1つの方法は関数fromUtf 8に含まれる文字列に対してのみ有効であるが,方法2の役割ドメインはより広く,もちろん他のプログラムモジュールの符号化にも影響を及ぼす可能性がある.
方法3:
インタフェースに表示される静的テキストについては、Qt言語家の方法で完成することができます.Qt言語家は中国語の問題を解決するために専門的に使われているわけではありませんが、効果的には方法ですが、漢字を表示するためだけの目的ではお勧めしません.詳しい使い方はここでは紹介しません.
以上の説明によれば、ネットワーク、外部コマンドの出力など、他のソースの中国語文字に対して、インタフェースに中国語で表示するには、文字列の符号化がQString処理の符号化と一致したり、互換性があるように適切な関数を選択するだけでよい.