YamaKen
yamak****@bp*****
2005年 2月 15日 (火) 22:25:49 JST
At Tue, 15 Feb 2005 21:53:17 +0900, h0131****@ice***** wrote: > On Tue, Feb 15, 2005 at 05:28:00PM +0900, YamaKen wrote: > > At Tue, 15 Feb 2005 15:35:59 +0900, > > h0131****@ice***** wrote: > > > On Sun, Feb 13, 2005 at 01:50:30PM +0900, Masanari Yamamoto wrote: > > > > これでuim-fepを起動できるようになったのですが、SKKが選択できません。 > > > > なにが原因なのかよくわかりません。 > > > > trussで確認しましたが、libuim-skk.soはopenできているようです。 (snip) > 調べてみたら原因がわかりました。uim-fepでuim_create_contexに渡す > encodingが"euc-jp"のように小文字にしていたのが駄目でした。このため、 > uim_iconv_is_convertibleのtocodeが"euc-jp"、fromcondeが"EUC-JP"になり > 、iconv_open("euc-jp", "EUC-JP")が-1になってuim_iconv_is_convertibleが > 0になるために、skkがはじかれていました。 > > int > uim_iconv_is_convertible(const char *tocode, const char *fromcode) > { > iconv_t ic; > > if (!strcmp("UTF-8", fromcode) || !strcmp(tocode, fromcode)) { > return 1; > } > /* TODO cache the result */ > ic = iconv_open(tocode, fromcode); > if (ic == (iconv_t)-1) { > return 0; > } > iconv_close(ic); > return 1; > } > > 質問なんですけど、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"を解さなかったと いう事じゃないかと思います。 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"; > } ------------------------------- ヤマケン yamak****@bp*****