[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:52575] Re: nl_langinfo(CODESET) returns ANSI_X3.4-1968
松田(健一)です。
From: TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxx> wrote:
Date: Fri, 19 Jun 2009 14:30:38 +0900
Message-ID: <8763eszt6q.fsf@xxxxxxxxxxxxxxxxxxxxxxx>
> それで原因を調べていたところ,nl_langinfo(CODESET) が正しい値を返していな
> いことに気づきました.添付したテスト用の source を保存し,コンパイルして
> 実行すると,
>
> % gcc -o test_langinfo test_langinfo.c
> % ./test_langinfo
> ANSI_X3.4-1968
>
> という結果になります.マニュアル nl_langinfo(3) によれば,
>
> CODESET (LC_CTYPE)
> 選択されたロケールで用いられる文字エンコード名を示す文字列を返す。
> <中略> この文字列は、"locale charmap" を実行して得られるものと同
> じである。
>
> となっているのですが,
>
> % locale charmap
> UTF-8
>
> となり,nl_langinfo(CODESET) を実行した場合と,locale コマンドを実行した
> 場合とで,結果が異なってしまっています.環境変数の設定は
>
> % printenv LANG
> ja_JP.UTF-8
>
> のみです.また,
(snip) ...
> というような状態なのですが,何の設定が足りないのでしょうか?
初期化関数の setlocale() を呼んでないのが原因ではないでしょうか?
#include <locale.h>
...
setlocale(LC_ALL, "")
とかを挿入すると、動くような気がします。
-- 引用 --
NL_LANGINFO(3)
setlocale(3) needs to be executed with proper arguments before.
-- 引用終り --
P.S.
C でプログラムを書くとき、初期化関数を呼び忘れる失敗はよくやっていました。
----
Keni
The statements and opinions expressed here are my own
and do not necessarily represent those of Oracle Corporation.