Issue #7211 has been updated by headius (Charles Nutter).


Under typical circumstances, isn't the string already going to have an encoding? Even in IRB, it's using the console default encoding, so the String does have an inherent encoding already.

The magic comment is used by the parser to know what encoding to assign to an otherwise opaque stream of bytes coming from a script. That's not the case for eval.

I'm not saying it wouldn't be useful, but it would basically amount to transcoding the eval'ed string to that encoding if it's different than the String's natural encoding, or else ignoring it completely if they're the same. In other words:

# coding: UTF-8
eval "# coding: ASCII-8BIT\nputs 'blah'"

would behave identically to:

eval "puts 'blah'".encode('ASCII-8BIT')

and

# coding: UTF-8
eval "# coding: UTF-8\nputs 'blah'"

would do nothing with encoding at all...
----------------------------------------
Bug #7211: eval does not respect encoding magic comment
https://bugs.ruby-lang.org/issues/7211#change-31473

Author: vo.x (Vit Ondruch)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]


=begin
This should work IMO.

 
 $ LANG=C irb
 irb(main):001:0> eval <<EOF
 irb(main):002:0" # encoding: utf-8
 irb(main):003:0" puts "vít"
 irb(main):004:0" EOF
 SyntaxError: (irb):3: invalid multibyte char (US-ASCII)
 (irb):1: syntax error, unexpected $end, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
 	from /usr/bin/irb:12:in `<main>'

I am currently bitten by this behavior in RubyGems. I have .gemspec [1], which have some UTF-8 characters, with the encoding magic comment. While building gem, RubyGems evals the .gemspec code [1], where the magic comment is ignored and build fails:

 $ LANG=C gem build gem-nice-install.gemspec 
 ERROR:  While executing gem ... (ArgumentError)
 invalid byte sequence in US-ASCII



[1] https://gist.github.com/3944821

[2] https://github.com/rubygems/rubygems/blob/master/lib/rubygems/specification.rb#L907
=end



-- 
http://bugs.ruby-lang.org/