setlocaleでロケールを取得したり、設定できる。
Man page of SETLOCALE
C言語辞典 setlocale()
C言語辞典 localeconv()
これ1つで設定と取得ができるが、使い方がわかりにくく、理解してなかった部分もあったので改めて。
実行すると、デフォルトのロケールが"C"ロケールになるので、それを確認するために、現在のロケール情報を出力。
setlocaleで第2引数にNULLをセットすると、変更せずに現在のロケール文字列を返す。
LC_ALLは全体としてどのロケールかを指定したもの。
通貨(LC_MONETARY)だけ日本("Japanese")に設定する。
そして、通貨のロケール文字列と全体のロケール文字列を出力。
で、実は"Japanese"だと通貨記号(currency_symbol)が文字化けする。
localeを日本語(ja_JP.UTF-8)にする - Qiita
なのでUTF-8を指定して改めて設定。
実行すると、
$ vi setlocale.c $ gcc setlocale.c -o setlocale $ ./setlocale lc->decimal_point = . lc->thousands_sep = lc->currency_symbol = current = C current = Japanese lc->decimal_point = . lc->thousands_sep = lc->currency_symbol = �� monetary = Japanese all = LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=Japanese;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C current = ja_JP.UTF-8 lc->decimal_point = . lc->thousands_sep = lc->currency_symbol = ¥ monetary = ja_JP.UTF-8 all = LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=ja_JP.UTF-8;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C $
ロケール文字列は1個に統一されてるとそれだけを持ち、複数ある場合はこのように全部を持っている。
Sample/c/setlocale/setlocale/src/setlocale at master · bg1bgst333/Sample · GitHub