From: Masaki Suketa Date: 2008-01-28T16:55:27+09:00 Subject: [ruby-dev:33450] Re: Win32OLE: set encoding to OLE string U.Nakamura wrote: > | > Win32OLEで、OLE経由で取得した文字列にencodingを設定するパッチ > | > を作ってみました。 > | > | 私は、まだ、Ruby のエンコーディングをよく理解していません。 > | そこで素朴な質問なんですが、 > | rb_default_external() じゃなくて、rb_locale_encoding() > | の方が適切なんでしょうか? > > Win32 APIからとってきた文字列は当然現在のコードページであって > default_externalであるとは限りませんから、rb_locale_encoding() > の方が適切だと判断しました。 なるほど。 > | あと、WIN32OLE.codepage= で、CP_ACP以外のコードページを > | 指定されていた場合、無条件に、rb_locale_encoding()するのは > | まずくないんでしょうか? > > ... が、コードページが指定可能とは気づいてなかったです。 以前、-Kオプションに合わせて、Win32OLE側のコードページを変更して くれ(-KuのときにUTF-8にしてくれ)という要望がありました。 当時から、Ruby 本体側で、m17n化の絡みで、-K オプションは無くす 方向という話が出ていたので、-Kオプションは敢えて無視して、 コードページを指定できるようにしました。 > 理想は、CP_ACP(OEMCPかな)に変換しないで、取ってきたままのUTF-16LE > あるいは成瀬さんの言うようにUTF-8で返すことだと思います。 > が、現実問題として互換性を維持する必要はそれなりにあると思い > ますので、とりあえずは cWIN32OLE_cp をrubyのEncodingにマップ > した形で設定するのがよいのではないかと思います。 単なる確認なのですが、ruby の Encoding というのは、 Encoding.default_external(rb_default_external()) のこと という理解で合ってますか? あと、cWIN32OLE_cp (Windowsのコードページ) と ruby の Encoding を対応づけるような都合のいいAPIは、Rubyには用意されていない ですよね? 助田 雅紀