myoukakuのブログ

C++でゲームエンジンを作っていきます。

ソースファイルのエンコードと文字列リテラルのエンコード

結構勘違いしている人が多いし私も最近まで知らなかったのですが、C/C++のソースファイルのエンコードと文字列リテラルエンコードは同じではありません。おそらく処理系依存だと思います。

VisualStudioの場合、ソースファイルのエンコードに関係なく文字列リテラルエンコードSJISになります。ワイド文字列リテラルUTF-16です。

次のようにすると

const char s[] = "あ";
for (auto c : s)
{
    std::printf("0x%02x\n", (unsigned char)c);
}
0x82
0xa0
0x00

と表示されることで確認できます。