[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:52572] nl_langinfo(CODESET) returns ANSI_X3.4-1968



土屋です.

最近,Windows 上で漢字を含むファイル名を使った zip ファイルを受け取る機
会が増えてきたので,

    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=483290

のパッチを適用して unzip を再パッケージしました.それで,その再パッケー
ジした unzip コマンドで

    unzip -O CP932 test.zip

のようにしたのですが,正しくファイル名が decode されません.

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

のみです.また,

    % grep -v ^# /etc/locale.gen 
    en_US ISO-8859-1
    en_US.UTF-8 UTF-8
    ja_JP.EUC-JP EUC-JP
    ja_JP.UTF-8 UTF-8

    % locale -a
    C
    POSIX
    en_US
    en_US.iso88591
    en_US.utf8
    ja_JP
    ja_JP.eucjp
    ja_JP.ujis
    ja_JP.utf8
    japanese
    japanese.euc

となっていますので,必要な locale database が生成されていない,ということ
もないはずだと思います.

というような状態なのですが,何の設定が足りないのでしょうか?

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )
#include <stdio.h>
#include <langinfo.h>

int main(void){
    char *local_charset = nl_langinfo(CODESET);
    printf( "%s\n", local_charset );
    return 0;
}