From: "U.Nakamura" Date: 2008-01-28T15:44:11+09:00 Subject: [ruby-dev:33446] Re: Win32OLE: set encoding to OLE string こんにちは、なかむら(う)です。 In message "[ruby-dev:33444] Re: Win32OLE: set encoding to OLE string" on Jan.28,2008 15:27:15, wrote: | ちょっとこのところ体調が悪くて、気になっているものの | encoding絡みの対応ができてなくてすいませんです。 ありゃ、それはお大事にしてください。 | 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()するのは | まずくないんでしょうか? ... が、コードページが指定可能とは気づいてなかったです。 ということは、rb_locale_charmap()相当の処理をかます必要がある でしょうね。 まいったな。 | 自分でもWin32OLEのencoding絡みの仕様はどうするのがいいのか、 | 整理できていない状態です。 理想は、CP_ACP(OEMCPかな)に変換しないで、取ってきたままのUTF-16LE あるいは成瀬さんの言うようにUTF-8で返すことだと思います。 が、現実問題として互換性を維持する必要はそれなりにあると思い ますので、とりあえずは cWIN32OLE_cp をrubyのEncodingにマップ した形で設定するのがよいのではないかと思います。 まあ、以上はあくまで私からの提案ですので、都合のいいようにし てください。 ruby本体側は、デフォルトではW系APIを使った上でrb_locale_encoding() に変換する方向に行こうかなあとは考えています。 UTF-8なりUTF-16LEなりで返す方法はまた別途考えるつもり。 それでは。 -- U.Nakamura