# Rb\_eval\_string\_protect and encoding

**URL:** <https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678>\
**Category:** Development\
**Created:** [July 25, 2009, 8:45am UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678 "2009-07-25T08:45:17Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 25, 2009, 8:45am UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/1 "2009-07-25T08:45:17Z")

</div>

e$B=uED$G$9!#e(B

rb\_eval\_string\_protect e$B$He(B Encoding e$B$K4X$9$k\<ALd$G$9!#e(B

e$B\<!$N%=!\<%9$N\<B9T7k2L$N:G8e$N9T$re(B

#Encoding:EUC-JP

e$B$H$9$k$?$a$K$O!"$I$&$9$l$P$$$$$s$G$7$g$&$+!)e(B  
rb\_eval\_string\_protect  
e$B$KEO$9J8;zNs$NCf$Ke(Beuc-jpe$B$NJ8;zNs$,4^$^$l$F$$$ke(B  
e$B$H$-!"$=$l$,e(B euc-jp  
e$B$N%9%/%j%W%H$H$7$FI\>2A$7$F$b$i$&$K$O$I$&$9$l$P$$$$e(B  
e$B$N$G$7$g$&$+!)e(B

/\*

- e$B$3$N%=!\<%9%U%!%$%k\<+BN$Ne(BEncoding e$B$Oe(Beuc-jp  
\*/  
#include \<stdio.h\>  
#include \<ruby.h\>  
#include \<ruby/encoding.h\>  
int main(int argc, char \*\* argv) {  
int state = 0;  
rb\_encoding \*enc;  
RUBY\_INIT\_STACK;  
ruby\_init();  
ruby\_init\_loadpath();  
rb\_enc\_find\_index(“encdb”);  
rb\_eval\_string\_protect(“puts RUBY\_DESCRIPTION”, &state);  
rb\_eval\_string\_protect(“p Encoding.default\_internal”, &state);  
enc = rb\_enc\_find(“euc-jp”);  
if(enc) {  
rb\_enc\_set\_default\_internal(rb\_enc\_from\_encoding(enc));  
}  
rb\_eval\_string\_protect(“p Encoding.default\_internal”, &state);  
rb\_eval\_string\_protect(“p 'e$B$”$$$&$($_e(B’.encoding", &state);  
return 0;  
}  
/_  
e$B\<B9T7k2Le(B  
ruby 1.9.2dev (2009-07-24 trunk 24264) [i686-linux]  
nil  
#Encoding:EUC-JP  
#Encoding:ASCII-8BIT  
\*/

e$B=uEDe(B e$B2m5\*e(B

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 25, 2009, 10:19am UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/2 "2009-07-25T10:19:31Z")

</div>

e$B$J$+$@$G$9!#e(B

At Sat, 25 Jul 2009 15:43:04 +0900,  
Masaki S. wrote in [ruby-dev:38900]:

> e$B\<!$N%=!\<%9$N\<B9T7k2L$N:G8e$N9T$re(B
> 
> #Encoding:EUC-JP
> 
> e$B$H$9$k$?$a$K$O!"$I$&$9$l$P$$$$$s$G$7$g$&$+!)e(B  
> rb\_eval\_string\_protect e$B$KEO$9J8;zNs$NCf$Ke(Beuc-jpe$B$NJ8;zNs$,4^$^$l$F$$$ke(B  
> e$B$H$-!"$=$l$,e(B euc-jp e$B$N%9%/%j%W%H$H$7$FI\>2A$7$F$b$i$&$K$O$I$&$9$l$P$$$$e(B  
> e$B$N$G$7$g$&$+!)e(B

e$B8=\>u$G$Oe(BStringe$B$re(Bevale$B$9$k4X?t$ODs6!$5$l$F$$$J$$$N$G!"e(Bmagic  
commente$B$rKd$a9~$`$/$i$$$7$+$J$$$G$9$M!#e(B

```
rb_eval_string_protect("#-*- coding: euc-jp -*-\n" "p 

```

‘e$B$"$$$&$($\*e(B’.encoding", &state);

e$B?7$7$$4X?t$rDI2C$9$k$H$7$?$i!"$I$s$JL\>A0$,$$$$$G$7$g$&$M$’!#e(B

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 25, 2009, 4:00pm UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/3 "2009-07-25T16:00:41Z")

</div>

e$B=uED$G$9!#e(B

Nobuyoshi N. wrote:

> > rb\_eval\_string\_protect e$B$KEO$9J8;zNs$NCf$Ke(Beuc-jpe$B$NJ8;zNs$,4^$^$l$F$$$ke(B  
> > e$B$H$-!"$=$l$,e(B euc-jp e$B$N%9%/%j%W%H$H$7$FI\>2A$7$F$b$i$&$K$O$I$&$9$l$P$$$$e(B  
> > e$B$N$G$7$g$&$+!)e(B
> 
> e$B8=\>u$G$Oe(BStringe$B$re(Bevale$B$9$k4X?t$ODs6!$5$l$F$$$J$$$N$G!"e(Bmagic  
> commente$B$rKd$a9~$`$/$i$$$7$+$J$$$G$9$M!#e(B
> 
> ```
> rb_eval_string_protect("#-*- coding: euc-jp -*-\n" "p 'e$B$"$$$&$($*e(B'.encoding", &state);
> 
> ```

e$B$J$k$[$I!"%@%$%l%/%H$K$=$&$d$k$7$+$J$$$s$G$9$M!#e(B

> e$B?7$7$$4X?t$rDI2C$9$k$H$7$?$i!"$I$s$JL\>A0$,$$$$$G$7$g$&$M$’!#e(B

e$B$&!\<$s!#2?$,$$$$$s$G$7$g$&$M!#e(B  
rb\_eval\_vstring\_protecte$B$H$+!)e(B

rb\_eval\_string\_protecte$B$r;H$&$H$9$k$H$3$s$J46$8$G$9$+!)e(B  
e$B!J%(%i!\<%A%’%C%/$,4E$$$+$b!Ke(B  
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);  
}

e$B=uEDe(B e$B2m5\*e(B

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 26, 2009, 2:06pm UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/4 "2009-07-26T14:06:54Z")

</div>

e$B=uED$G$9!#e(B

Nobuyoshi N. wrote:

> e$B$$$d!"e(BStringe$B$J$i$9$G$Ke(BEncodinge$B$r;}$C$F$$$k$N$G!“e(Bmagic commente$B$re(B  
> e$BDI2C$9$kI,MW$O$”$j$^$;$s!#$@$+$i$3$=!“e(BStringe$B%P!\<%8%g%s$,$”$l$P2re(B  
> e$B7h$9$k$N$+$J$H$$$&$3$H$G$9!#e(B

e$B$J$k$[$I!#e(Bmagic comment e$B$OITMW$J$s$G$9$M!#e(B  
e$B5U$K$D$$$F$$$?$j$9$k$H$^$:$$$s$G$7$g$&$+!)e(B

e$B2\>$Ke(B magic comment e$B$,e(B String object  
e$B$K4^$^$l$F$$$F!“e(BString object  
e$B$Ne(B encoding e$B$H0lCW$7$F$$$J$$$H$-$O!”$^$:$$$s$G$9$+$M!#e(B  
e$B$=$l$H$be(B magic comment e$B$,M%@h$5$l$k$G$7$g$&$+!)e(B

e$B$H$$$&$+$I$&$$$&5sF0$,!“e(BRubye$B$rB\>$N%”%W%j$KAH$\_9~$`>l9g$KET9g$,$h$$e(B e$B$N$+<+J,$G$b$h$/$o$+$i$J$$e(B... e$BAH$_9~$`%"%W%j\<!Bh$+$J!#e(B

e$B\>/$J$/$H$be(B encoding e$B$,2?$i$+$N7A$G;XDj$G$-$ke(B rb\_eval  
e$B7Oe(B e$B$Ne(B API e$B$,e(B  
e$B$"$C$?J}$,4r$7$$$H;W$$$^$9!#e(B

e$B=uEDe(B e$B2m5\*e(B

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 26, 2009, 1:22pm UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/5 "2009-07-26T13:22:25Z")

</div>

e$B$J$+$@$G$9!#e(B

At Sat, 25 Jul 2009 23:00:13 +0900,  
Masaki S. wrote in [ruby-dev:38904]:

> rb\_eval\_string\_protecte$B$r;H$&$H$9$k$H$3$s$J46$8$G$9$+!)e(B  
> e$B!J%(%i!\<%A%’%C%/$,4E$$$+$b!Ke(B  
> 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);  
> }

e$B$$$d!"e(BStringe$B$J$i$9$G$Ke(BEncodinge$B$r;}$C$F$$$k$N$G!“e(Bmagic  
commente$B$re(B  
e$BDI2C$9$kI,MW$O$”$j$^$;$s!#$@$+$i$3$=!“e(BStringe$B%P!\<%8%g%s$,$”$l$P2re(B  
e$B7h$9$k$N$+$J$H$$$&$3$H$G$9!#e(B

VALUE  
rb\_eval\_vstring(VALUE str)  
{  
return eval\_string(rb\_vm\_top\_self(), str, Qnil, “(eval)”, 1);  
}

VALUE  
rb\_eval\_vstring\_protect(VALUE str, int \*state)  
{  
return rb\_protect(rb\_eval\_vstring, str, state);  
}

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 27, 2009, 3:39am UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/6 "2009-07-27T03:39:15Z")

</div>

e$B$J$+$@$G$9!#e(B

At Sun, 26 Jul 2009 21:05:58 +0900,  
Masaki S. wrote in [ruby-dev:38907]:

> e$B2\>$Ke(B magic comment e$B$,e(B String object e$B$K4^$^$l$F$$$F!“e(BString object  
> e$B$Ne(B encoding e$B$H0lCW$7$F$$$J$$$H$-$O!”$^$:$$$s$G$9$+$M!#e(B  
> e$B$=$l$H$be(B magic comment e$B$,M%@h$5$l$k$G$7$g$&$+!)e(B

magic commente$B$,M%@h$5$l$^$9!#e(B

> e$B$H$$$&$+$I$&$$$&5sF0$,!“e(BRubye$B$rB\>$N%”%W%j$KAH$\_9~$`>l9g$KET9g$,$h$$e(B e$B$N$+<+J,$G$b$h$/$o$+$i$J$$e(B... e$BAH$_9~$`%"%W%j\<!Bh$+$J!#e(B
> 
> e$B\>/$J$/$H$be(B encoding e$B$,2?$i$+$N7A$G;XDj$G$-$ke(B rb\_eval e$B7Oe(B e$B$Ne(B API e$B$,e(B  
> e$B$"$C$?J}$,4r$7$$$H;W$$$^$9!#e(B

rb\_encoding\*  
e$B$^$?$O%(%s%3!\<%G%#%s%0L\>$r;XDj$9$kI,MW$,$"$ke(BAPIe$B$H$+!"e(B  
Stringe$B$r;H$&$b$N$H$+$/$i$$$7$+;W$$$D$-$^$;$s$,!“B\>$K2?$+%”%$%G%“e(B  
e$B$”$j$^$9$+!#e(B

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [July 27, 2009, 4:03am UTC](https://www.ruby-forum.com/t/rb-eval-string-protect-and-encoding/172678/7 "2009-07-27T04:03:16Z")

</div>

e$B=uED$G$9!#e(B

Nobuyoshi N. wrote:

> > e$B2\>$Ke(B magic comment e$B$,e(B String object e$B$K4^$^$l$F$$$F!“e(BString object  
> > e$B$Ne(B encoding e$B$H0lCW$7$F$$$J$$$H$-$O!”$^$:$$$s$G$9$+$M!#e(B  
> > e$B$=$l$H$be(B magic comment e$B$,M%@h$5$l$k$G$7$g$&$+!)e(B
> 
> magic commente$B$,M%@h$5$l$^$9!#e(B

e$B$J$k$[$I!#9M$($F$\_$l$P!"$=$l$,0lHV\<+A3$J5$$,$7$^$9!#e(B

> > e$B\>/$J$/$H$be(B encoding e$B$,2?$i$+$N7A$G;XDj$G$-$ke(B rb\_eval e$B7Oe(B e$B$Ne(B API e$B$,e(B  
> > e$B$"$C$?J}$,4r$7$$$H;W$$$^$9!#e(B
> 
> rb\_encoding\* e$B$^$?$O%(%s%3!\<%G%#%s%0L\>$r;XDj$9$kI,MW$,$"$ke(BAPIe$B$H$+!"e(B  
> Stringe$B$r;H$&$b$N$H$+$/$i$$$7$+;W$$$D$-$^$;$s$,!“B\>$K2?$+%”%$%G%“e(B  
> e$B$”$j$^$9$+!#e(B

e$B$$$(!#;d$b$=$Ne(B2e$B$D$0$i$$$7$+;W$$$D$-$^$;$s!#e(B

e$B=uEDe(B e$B2m5\*e(B
