[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;
}