« [Ruby] rSquery | トップページ | [Ruby] WIN32OLE_TYPELIB#name »

2009年5月16日 (土)

[Ruby] WIN32OLE_TYPELIB などのエンコーディング


WIN32OLE_TYPELIB などのメソッドは



$ ruby -v -rwin32ole -e 'p WIN32OLE_TYPELIB.typelibs[0].name.encoding'
ruby 1.9.1p129 (2009-05-12 revision 23411) [i386-cygwin]
#<Encoding:ASCII-8BIT>


うーん。本来はどうすべきだろうか?




  1. 現状のままASCII-8BIT



  2. Encoding.default_external nil じゃなかったら Encoding.default_external に encode する。
    nil の場合は、ASCII-8BIT のまま。



  3. Windows API の GetACP() から得られる情報を元に Encoding を設定する。
    更に、Encoding.default_external が nil じゃなかったら、
    Encoding.default_external に encode(force_encodingじゃなくて) する。




1. は、WIN32OLE_TYPE を使う側が適切な Encoding を指定(force_encoding)しなくてはならない訳で、使う方はかなり面倒。
2. は、WIN32OLE_TYPE を使う側に常に Encoding.default_external(Encoding.default_internal) を
意識しろと強制している訳でそれはそれでアリな気もする。
でも、使う方にとってはちょっと面倒。
やっぱり、Encoding.default_external を意識している人には、そのように設定してあげて、
意識していない人のために、GetACP()のencodingに変換してあげる 3. が妥当な気もする。


|

« [Ruby] rSquery | トップページ | [Ruby] WIN32OLE_TYPELIB#name »

コメント

> Encoding.default_external が nil じゃなかったら

Encoding.default_external には常に何かしらのエンコーディングがセットされます。Encoding.default_external が nil になることはありません。
Encoding.default_internal はユーザがセットしなければ nil になります。

投稿: sheepman | 2009年5月17日 (日) 10時57分

ご指摘ありがとうございます。
Encoding.default_external と Encoding.default_internal を混同してしまってました。

投稿: suke | 2009年5月17日 (日) 16時29分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] WIN32OLE_TYPELIB などのエンコーディング:

« [Ruby] rSquery | トップページ | [Ruby] WIN32OLE_TYPELIB#name »