TOKUNAGA Hiroyuki
tkng****@xem*****
2004年 2月 6日 (金) 19:34:56 JST
On Fri, 06 Feb 2004 18:32:56 +0900 YamaKen <yamak****@bp*****> wrote: > > > ・変換対象文字列のエンコーディングがtoとfromで同じだったらiconv > > > を使わずそのまま文字列をアプリ側に渡す > > > > > > ・アプリ側で各IMのネイティブエンコーディングを知るために以下の > > > APIを追加 > > > > > > const char *uim_get_im_encoding(uim_context uc, int nth); > > > > uim_code_convがiconvに依存してしまっている現状ではどうしようもない > > のですが、ここらへんをもうちょっとなんとかすれば、アプリ側でIMのネイ > > ティブエンコーディングを知る必要はないんじゃないかと思うのですが、ど > > うでしょう? > > ちょっと徳永さんの言わんとしている事が理解できてませんが、私が意 > 図しているのは以下のような処理です。 > > 1) uim_get_im_encoding()でIM毎のエンコーディングを知る > > native_encoding = uim_get_im_encoding(uc, nth); > > 2) 1)で得たエンコーディングに応じたQTextCodecを用意する(例えば > QEucJpCodec) > > QTextCodec codec = QTextCodec::codecForName(native_encoding); > > 3) IMから送られてきた文字列を、2)のコーデックでQStringに変換する > > QString qt_str = codec->toUnicode(im_native_str); > > iconvに代わる汎用変換インタフェイスを別途用意しない限りは上記の > ような流れで処理するしかないと思うんですが、もっと別の次元の話で > すか? 私が考えてるのは以下のような変更です。 uim_context構造体にiconv_t convというメンバがありますが、これを uimconv_t convとかそんな感じの名前に変える。 環境によってはtypedef uimconv_t iconv_t、またある環境によってはtypedef uimconv_t QTextCodec、という感じでifdefでuimconv_tの実体を変える。 現在iconvを使って処理しているuim_code_convやその他いくつかの関数を ifdefで書き換える。 どうせconfigure時にiconvの有無やiconvに代わるエンコーディング変換機能の 有無のチェックをしなければならないならば、これでも問題なく(そして変更点 は少なく)問題が解決できると思います。 ここまで書いてから気づいたのですが、ヤマケンさんが考えてるのは、 uim_contextのメンバのconvはまったく使わずに、ブリッジ側でエンコーディン グを変換するという方法ですよね。たしかにその方がlibuimは変更せずに済むの で楽なような気もするのですが、将来的にはどっちが楽なんでしょう?もうちょ っと考えてみないと、私にはわかりそうにないです。 -- 徳永拓之 http://kodou.net/