QT+VSコンパイラは文字列を処理する時のピットが本当に多いです

1962 ワード

以下の要因に影響がある:1.QT 4はQT 5と文字列符号化の処理が異なる(ソースコードに直接中国語を書かないほうがいい、ピットが多い).QTextCodecは自動的に符号化変換に与える影響3.ソースファイルの符号化格納フォーマットの違いは、コンパイラの文字列の理解に影響する.異なるバージョンのコンパイラはソースファイルに対する理解が異なり、例えばVC 6とVC 2005の違い、例えばVS 2010のpragma命令、さらにMinGWとVCコンパイラの違いは言うまでもない.5.つまり私が今日出会った、VS出力デバッガが文字列符号化に与える影響.以下のコードは単一のデバッグ状態でutf 8ファイルを読み取り、中国語が正しく、外国語の特殊文字が文字化けしている(実際には文字化けしていないが、疑問符を表示している)、前のQTの多くの穴を考えると、私はもうおかしくない.今日は意外にも印刷値をインタフェースに表示して、すべて正しいです!VSデバッガ出力部(qDebug文を使用しているにもかかわらず)は、QTプログラムの文字列符号化に対する理解とは異なるようです.
QTextStream in(&file);
in.setCodec("UTF-8"); // good, , 

while(!in.atEnd())
{
    QString line = in.readLine();
    qDebug() << line.toLocal8Bit(); // convert to locale multi-byte string 
    strCode = line;
}
file.close();

ため息をつくと、最も親切なデバッガさえ頼りにならないので、最終的にプログラムを実行してこそ頼りになるので、これからは気をつけてください.
------------------------------------------------------------------------------
私は気を失って、また新しい発見があります:VSデバッグ状態、下の左右の2つの領域、左はWatch 1ウィンドウを選択して、右はOutputウィンドウを選択して、同じqDebug出力値、左はWatchが正しいで、右はOutputエラー!皆さん、試してみてください.以下の文字をutf 8ファイルに保存してください.zsse中国はutf 8_が一番いいです.次に私のコードで読み取った後、WatchとOutputの異なる出力を観察します.
PS、私はVS 2008 SP 1 TEAM英語版+4.86公式版(非自作訳版)を使用しています.
------------------------------------------------------------------------------
参考資料:http://www.qtcn.org/bbs/read-htm-tid-54151.html