[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.