Masanari Yamamoto
h0131****@ice*****
2005年 2月 15日 (火) 23:55:48 JST
山本です。回答ありがとうございます。 On Tue, Feb 15, 2005 at 10:25:49PM +0900, YamaKen wrote: > > 質問なんですけど、uim_create_contexに渡すencodingはどのように決めれば > > いいのでしょうか? uim-fepでは以下のように、locale="ja"のときは"EUC-JP"、 > > それ以外はlocaleの"."の右側の文字列、"."がなければ、"UTF-8"というように > > する予定なんですが。 > > iconv_open(3)が正しく解釈できる名前を渡す必要があります。今uim.h > を見てみましたがその記述が欠落していますね。追加しておきます。 > > 私の手元のiconv_openのマニュアルでは以下のように記述されています > が、非標準の"euc-jp"も"EUC-JP"として解釈しているんだと思います。 > これに対して山本さんの環境のiconv_openは"euc-jp"を解さなかったと > いう事じゃないかと思います。 うちのsolarisのiconvは壊れているようです。iconv -lの中にEUC-JPがあるに もかかわらず、iconv_open("EUC-JP", "EUC-JP") == -1になってしまいます。 > > The values permitted for fromcode and tocode and the supported combina- > tions are system dependent. For the libiconv library, the following > encodings are supported, in all combinations. > > Japanese > EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, > ISO-2022-JP-1 > > というわけで、以下のコードで環境変数から取得したencodingを使う場 > 合はiconv_open(3)が受け入れ可能な文字列に正規化する必要があると > 思います。 > > > const char *get_enc(void) > > { > > const char *locale; > > if ((locale = setlocale(LC_CTYPE, "")) != NULL) { > > if (strcasecmp(locale, "ja") == 0) { > > return "EUC-JP"; > > } else { > > char *ptr = strstr(locale, "."); > > return ptr != NULL ? ptr + 1 : "UTF-8"; > > } > > } > > return "UTF-8"; > > } iconv_openが受け入れ可能な文字列にする方法がわからないので、とりあえず このままにします。 -- 山本将也