From: Masaki Suketa Date: 2009-07-25T23:00:13+09:00 Subject: [ruby-dev:38904] Re: rb_eval_string_protect and encoding 助田です。 Nobuyoshi Nakada wrote: > >> rb_eval_string_protect に渡す文字列の中にeuc-jpの文字列が含まれている >> とき、それが euc-jp のスクリプトとして評価してもらうにはどうすればいい >> のでしょうか? > > 現状ではStringをevalする関数は提供されていないので、magic > commentを埋め込むくらいしかないですね。 > > rb_eval_string_protect("#-*- coding: euc-jp -*-\n" "p 'あいうえお'.encoding", &state); なるほど、ダイレクトにそうやるしかないんですね。 > 新しい関数を追加するとしたら、どんな名前がいいでしょうねぇ。 うーん。何がいいんでしょうね。 rb_eval_vstring_protectとか? rb_eval_string_protectを使うとするとこんな感じですか? (エラーチェックが甘いかも) VALUE rb_eval_vstring_protect(VALUE s, int *state) { char *encname; VALUE v; encname = rb_enc_name(rb_enc_get(s)); v = rb_sprintf("#-*- coding:%s-*-\n%s", encname, StringValuePtr(s)); return rb_eval_string_protect(StringValuePtr(v), state); } 助田 雅紀