From: "nagachika (Tomoyuki Chikanaga)" Date: 2013-09-05T17:49:04+09:00 Subject: [ruby-core:57037] [ruby-trunk - Bug #8866][Assigned] frozen string literal("foo"f ) can ignore source encoding after r42843. Issue #8866 has been reported by nagachika (Tomoyuki Chikanaga). ---------------------------------------- Bug #8866: frozen string literal("foo"f ) can ignore source encoding after r42843. https://bugs.ruby-lang.org/issues/8866 Author: nagachika (Tomoyuki Chikanaga) Status: Assigned Priority: Normal Assignee: charliesome (Charlie Somerville) Category: core Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-09-05 trunk 42844) [x86_64-darwin11.4.2] Backport: 1.9.3: DONTNEED, 2.0.0: DONTNEED Hello, After r42843, frozen string literal can have encoding different from script encoding. example: usascii.rb: # coding: us-ascii def usascii "foo"f end utf8.rb: # coding: utf-8 def utf8 "foo"f end $ ruby -r./usascii -r./utf8 -e 'p [usascii.object_id == utf8.object_id, usascii.encoding, utf8.encoding]' [true, #, #] $ ruby -r./utf8 -r./usascii -e 'p [usascii.object_id == utf8.object_id, usascii.encoding, utf8.encoding]' [true, #, #] It is because fstring_hash_type use rb_str_cmd for compare functions. rb_str_cmd() treat strings contains only ascii characters with ascii compatible encodings as same strings. Regards. -- http://bugs.ruby-lang.org/