MSYS2環境のgccで作成したexeでの日本語表示
忘れそうなのでメモ。環境は、MSYS2のWin64 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出力に変えられないのは謎。