setlocale, _wsetlocale | Microsoft Learn
C/C++での日本語文字列の扱い、どうすればよいか - minus9d's diary
標準出力にユニコードを出力させる - わびさびサンプルソース
Linuxでは、
/* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ #include <locale.h> /* ロケール */ /* main関数の定義 */ int main(void){ /* NULL指定 */ char *loc1 = setlocale(LC_ALL, NULL); /* setlocaleにLC_ALL, NULLを指定. */ printf("loc1 = %s\n", loc1); /* loc1を出力. */ /* ""指定 */ char *loc2 = setlocale(LC_ALL, ""); /* setlocaleにLC_ALL, ""を指定. */ printf("loc2 = %s\n", loc2); /* loc2を出力. */ /* "C"指定 */ char *loc3 = setlocale(LC_ALL, "C"); /* setlocaleにLC_ALL, "C"を指定. */ printf("loc3 = %s\n", loc3); /* loc3を出力. */ /* "ja_JP.UTF-8"指定 */ char *loc4 = setlocale(LC_ALL, "ja_JP.UTF-8"); /* setlocaleにLC_ALL, "ja_JP.UTF-8"を指定. */ printf("loc4 = %s\n", loc4); /* loc4を出力. */ /* ここでNULL指定. */ char *loc5 = setlocale(LC_ALL, NULL); /* setlocaleにLC_ALL, NULLを指定. */ printf("loc5 = %s\n", loc5); /* loc5を出力. */ /* ここで""指定. */ char *loc6 = setlocale(LC_ALL, ""); /* setlocaleにLC_ALL, ""を指定. */ printf("loc6 = %s\n", loc6); /* loc6を出力. */ /* "ja_JP.EUC-JP"指定 */ char *loc7 = setlocale(LC_ALL, "ja_JP.EUC-JP"); /* setlocaleにLC_ALL, "ja_JP.EUC-JP"を指定. */ printf("loc7 = %s\n", loc7); /* loc7を出力. */ /* プログラムの終了 */ return 0; }
と書くと、
こうなる。
NULLを指定で現在のロケールが返る。
デフォルトは"C"ロケール。
""指定は"C"ロケール。
UTF-8やEUC-JPなど入っているロケール指定も出来る。
一方で、Windowsでは、
と書くと、
NULLを指定で現在のロケールが返る。
デフォルトは"C"ロケール。
""指定は"Japanese_Japan.932"
基本的に"C"と"Japanese_Japan.932"しか指定できない。
"Japanese"とか省略形は可。
"UTF-8"とか指定しても失敗する。
Sample/c/setlocale/setlocale_Windows/src/setlocale at master · bg1bgst333/Sample · GitHub