[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>
うーん。本来はどうすべきだろうか?
現状のままASCII-8BIT
Encoding.default_external nil じゃなかったら Encoding.default_external に encode する。
nil の場合は、ASCII-8BIT のまま。
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. が妥当な気もする。
| 固定リンク
この記事へのコメントは終了しました。
コメント
> 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分