QT 5中国語の文字化けし問題


#pragma execution_character_set("utf-8") !!! char UTF-8 。

なぜ文字化けしたのか
まず,乱符号化の問題が符号化と復号方式に起因するという概念が必要である.符号化方式に関する点は3つあります.
  • ソースコード文字セット
  • 実行文字セット
  • 実行環境文字セット
  • ソース文字セット(the source character set):ソースファイルの場合、どのような符号化フォーマットで保存されますか.実行文字セット(the execution character):実行可能プログラムに保存されているコード(プログラム実行時にメモリ内の文字列符号化)
    gcc実行文字セット設定パラメータ-finput-charset=charset//ソース文字セットをcharset-fexec-charset=charset//実行文字セットをcharset-fwide-exec-charset=charset//広い文字列の実行文字セットをcharsetに設定
    msvc実行文字セット設定パラメータ-execution-charset:utf-8//プログラム実行時にUTF-8文字セット-source-charset:utf-8//ソースファイルのUTF-8文字セットへの符号化を示す
    ソース文字セットは正確にはコンパイラがソースファイルの符号化方式と考え、実行文字セットは実行可能プログラムが採用する符号化方式であり、実行環境文字セットは環境がサポートする符号化方式である.コンパイラが文字列を処理する過程は、実際にはまず文字のバイナリ数を読み込んで、符号化フォーマットから別の符号化フォーマットへの変換ポリシーに従って別のバイナリ数を得るので、1->2はバイナリ数の変化がある可能性があり、3は既定の符号化方式で2のバイナリ数を文字として解読する(ここではなぜ可能なのか、1と2が同じ符号化であれば変化は必要ないからである).
    では、文字化けしの原因は、1コンパイラがソース文字セットを解読したエラーです.私がutf-8のソースコードであれば、bomを持っていないのでlocaleと見なし、文字セットを実行するのもlocaleなので変換する必要はありませんが、本来utf-8からlocaleに変換する必要があります.②ソース文字セットから実行文字セットへの変換エラー.本来、正しいソースコード文字セットlocaleを認識して文字セットを実行するutf-8に変換した場合、xxx符号化によってutf-8を変換させるポリシー変換を指定してくれました(Note:これは誤った表現ですが、以下を見ると、実際にはここの誤りは変換アルゴリズムの誤りにすぎないことがわかります).③文字解析エラー.プログラム内の文字列バイナリがutf-8の場合、実行文字セットがloacleであると言わなければならない場合は、解析がエラーになります.
    さらに理解する必要があるのは、次の知識です.
  • windows consoleコンソールコードページはlocaleであり、すなわちプログラム中の文字列をバイナリ表示し、localeが文字セットを実行して
  • を解読する.
  • 文字列バイナリの表現形式はコンパイルを必要とせず、実行プログラムのバイナリに直接コピーされる
  • .