中国語C/C++における処理と漢字文字化けし問題(wchar_t)(転)

4529 ワード

C/C++における中文字の処理
                                   ,                 ,                   C/C++      ,                 ,  DEV-C++ VS2005  ,  MSDN                           。

                C/C++     。

まず中文字は一般charの範囲外なので、私たちは単一charで私たちの中文字を保存することができません.そこで、私たちはwchar_を導入することが多いです.tというワイド文字のデータ型.しかし、私が使ったコンパイル環境では一般的にwchar_と定義されています.t、これはC++言語で認められた定義で、彼の空間はunsigned shortの大きさと同じなので、typedef unsigned short wchar_t、彼は16人です.
DEV-C++では使用できない方法がたくさんありますが、VS 2005では定義して適用できる多くの方法と多くのライブラリ関数はDEV-C++では使用できません.MSDNや多くのネットワーク資料で言及されているような入出力方法は、wcinやwoutのようにDEV-C++に未定義であることを示しており、つまりDEV-C++はこれらの方法をサポートしていない.単純なワイド文字の入力と出力は次のとおりです.
#include

using namespace std;

int main()

{

        wchar_t a[3];

        wcin >> a;

        wcout << a << endl;

    return 0;

}

しかし、これは単一の漢字文字しか入力できません.2を超えると文字があふれ出すエラーがあります.このような方法では、wcharを使っていますが、私たちの目的を全く際立たせていません.それは依然として1つの中文字が2つのwcharを占めています.t単位、しかも中の漢字文字を操作することはできないのでできませんが、これはCの使い方で、C++の中でwcharはそれを修正して、中国語のサポートをもっとよくしました.
C++で、wchar_tは言語内で構築されたデータ型、wchar_tの長さは実装によって決定される.ここで、私たちのC++における中国語のサポートと応用について正式に議論し始めます.
C++は良い言語で、異なる地域言語の開発に適しているため、localeパッケージというヘッダファイルを追加し、異なる言語と言語の略語を定義しています.これはwcharを使っていますt中国語の各方面の操作を行う重要な一環である.私たちの入出力に重要な影響があります.
まず、私たちの応用事例はこうです.
#include 

#include 

using namespace std;

int main()

{

    locale loc( "Chinese-simplified" );

    wcin.imbue(loc);

    wcout.imbue( loc );

    //       setlocale(LC_ALL,"chs");      。

    wchar_t c[4];

    wcin >> c;

    wcout << c <<endl;

    return 0;

}

ここでは#include を用いてこのヘッダファイルを含み、localeのオブジェクトを生成します.中のパラメータは中国語のみを採用し、次に私たちの入力と出力に対してimbueの設定を行い、Changes the localeの役割を果たします.すると、入力と出力は、中文字単位のストレージプロセスになります.前例のc[4]は3つの中文字を入力することができ、最後の1つは'0'であり、これによって私たちが要求した効果を初歩的に達成した.同時に、私たちが望む各位置決めの中国語文字を取り出し、charと同じデータ処理を行うことができます.