[Anthy-dev 1842] Re: uim-0.4.6alpha on Solaris8

アーカイブの一覧に戻る

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が受け入れ可能な文字列にする方法がわからないので、とりあえず
このままにします。

-- 
山本将也



Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る