2009年6月19日

[debian-users:52575] Re: nl_langinfo(CODESET) returnsANSI_X3.4-1968

松田(健一)です。

From: TSUCHIYA Masatoshi <tsuchiya@xxxxx> wrote:
Date: Fri, 19 Jun 2009 14:30:38 +0900
Message-ID: <8763eszt6q.fsf@xxxxx>

> それで原因を調べていたところ,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.


投稿者 xml-rpc : 2009年6月19日 21:48
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86042
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。