hakeの日記

Windows環境でプログラミングの勉強をしています。

MSYS2環境のgccで作成したexeでの日本語表示

忘れそうなのでメモ。環境は、MSYS2Win64 Shell(MSYS2 Shellではない)上のgccの場合。

  • 予め.bashrcに環境変数LC_ALLを設定しておく。
export LC_ALL=ja_JP
  • Cのソース内にsetlocale(LC_ALL, "")を記述する。
#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(int argc, char *argv[]){

	setlocale(LC_ALL, "");
	wchar_t c[] = L"あaい";
	wprintf(L"%4lx  %lc\n", c[0],c[0]); // 3042  あ
	wprintf(L"%4lx  %lc\n", c[1],c[1]); //   61  a
	wprintf(L"%4lx  %lc\n", c[2],c[2]); // 3044  い
	wprintf(L"%4lx\n", c[3]);           //    0

	return 0;
}

出力される文字コードは、何故かデフォルトでcp932になる。
コンパイルオプション --exec-charset=utf-8 を付けてコンパイルしてもWin64 Shellの文字コードである utf-8出力に変えられないのは謎。