MBCSとは
普通、「A」という文字は「半角文字」と呼ばれる。また「A」は1バイトとして扱われている。 同じように「あ」という文字は「全角文字」で2バイトとして扱われる。このように同じ1文字で も1バイトと2バイトの文字が混在しているのが「MBCS(MultiByte Character Set)」だ。MBCSでは日本語を扱うことができる...と言うと語弊があるが「ABC」のような英語と日本語や中 国語、韓国語などで使われている文字を混在することができる。ただし混在できるのは基本的に1 つの言語のみとなる。例えばMBCSを使って日本語の平仮名とと韓国語のハングル文字を混在するこ とはできない。
ユニコードとは
「ユニコード」というのは文字コードセットの1つ。英語と日本語や中国語などで使われている さまざまな文字を同時に扱える。MBCSでは「A」という文字は1バイトとして扱われている。しかしユニコードでは「A」という文 字であっても2バイトで扱われる。また「あ」という文字も同じように2バイトとして扱われる。 つまり常に1文字に必要なバイト数は同じになる。
このようにユニコード文字は1文字が2バイトのため「ワイド文字」と呼ばれることもある。
※ユニコードでも世界で使われている全ての文字を扱えるわけではない
※ユニコードにもいくつかの種類がある。その種類によっては1文字2バイトとは限らない
charとWCHAR
通常C言語では文字を表現する型として「char」、文字列は「char*」が使われる。この「char」で扱う文字は全て「MBCS」となる。つまり「char」ではユニコードを扱うことは できない。
そのためユニコード文字を扱う型として「wchar_t」や「WCHAR」が用意されている
また当然のことながらsizeof(char)は1バイトだが、sizeof(WCHAR)は2バイトとなる。
※ユニコードにもいくつかの種類がある。その種類によってはcharでもユニコードを扱える
ユニコードとMBCSの相互変換
MBCS文字とユニコード文字の変換は単純にはできない。変換にはWideCharToMultiByteのような APIを利用することになる(具体的な変換例は別ページ参照)。またユニコードとMBCSでは表現できる文字の"幅"が違うため変換できないこともある。例えるなら ばlong型からshort型への変換のようなものだ。long型は9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 までの数値を代入できる。しかしshort型は-32,768 ~ 32,767までだけであり、long型に大きい数 値が入っていた場合にはshortに代入できないためだ。これと同じ関係がMBCSとユニコードの間にも あることは頭の片隅に置いておくといいだろう。







