#はじめに
文字セットや文字コード、文字を扱う型について混乱するため、調べた内容を備忘録として残していきます。
まだまだ全然分からないので、色々なサイトを歩き回ってまとめてました。
#文字セットについて
文字セットは大きく分けると以下の2つに大別される。
1. マルチバイト文字セット
アルファベットは1Byte、日本語は2Byteのように1/2Byteどちらかで表す方式のこと。
2. ワイド文字セット
1文字を常に2Byteで表す方式のこと
※Unicodeには4バイトまで拡張されたものもあるが、ワイド文字セットには含まないこととする。
#文字コードについて
-
Shift_JIS
マルチバイト文字セットで表される日本語を扱うための文字コードの1つ -
Unicode
ワイド文字セットで表される世界中の文字を表そうとする文字コード
※前述のとおり、4Byteまで拡張されたものも存在している。
#文字を扱う型
-
char型
マルチバイト文字セットで表す。 -
wchar_t(WCHAR)型
ワイド文字セットで表す -
TCHAR型
マルチバイト文字セット・ワイド文字セットのどちらも扱うことができる。
どちらの文字セットで扱うかは、以下の設定によって異なる。
ユニコードが設定されている場合:ワイド文字セットとして扱う。
マルチバイト文字セットが設定されている場合: マルチバイト文字セットして扱う。 -
LPCSTR
「const char*」であり、charと同様の扱い方。 -
LPCWSTR
「const WCHAR*」であり、WCHARと同様の扱い方。 -
LPCTSTR
「const TCHAR*」であり、TCHARと同様の扱い方。 -
CString
「TCHAR*」であり、TCHARと同様の扱い方。 -
std::string
「char*」であり、charと同様の扱い方。
文字セットの設定
Visual Studioでは、プロジェクトの「プロパティ」→「全般」→「文字セット」から
以下の2つのどちらかを設定できる。
1. Unicode文字セットを使用する
2. マルチバイト文字セットを使用する
文字セットの設定を変更することでの問題
Visual Studioでは、デフォルトの設定が「Unicode文字セットを使用する」になっており、
マルチバイト文字セットは非推奨となっている。
【理由】
1. shift_JISでは、多言語に対応していないため、文字化けが発生する。
CStringからstring型への変換
Unicode文字セットを使用する場合、CStringはワイド文字セット、
stringはマルチバイト文字セットで扱われるため、変換ができない。
そこで、以下の2つの方法で変換可能。
1. 文字セットの設定を「マルチバイト文字セットを使用する」にする。
2. WideCharToMultiByte関数を使用する。
終わりに
色々調べてみたが、まだまだよくわからない点が多いなーっといった感想です。
本記事を編集・追記していきながら、文字の扱いについて、本記事を見たら
理解ができることを目指していきたいです。