D
Do One
Please help to understand solution to this problem (ruby 1.9.1):
In utf-8 environment I do:
irb(main):121:0> h = {"a" => 1, "\u0101" => 2}
=> {"a"=>1, "Ä"=>2}
irb(main):122:0> h.key? "a".tr("z", "\u0101")
=> false <--- wrong!
irb(main):123:0> h.key? "\u0101".tr("z", "\u0101")
=> true
So after I change utf-8 string without extended chars in it with tr(),
where second character set is having extended chars, new string is not
found in hash.
Boths string are same in Marshal encoding:
irb(main):124:0> Marshal.dump "a".tr("\u0101", "\u0101")
=> "\x04\bI\"\x06a\x06:\rencoding\"\nUTF-8"
irb(main):126:0> Marshal.dump "a"
=> "\x04\bI\"\x06a\x06:\rencoding\"\nUTF-8"
Question is how I should code using tr() that new string will be found
in hash?
And I think this is bug in ruby, because it is completely not expected
behavior.
In utf-8 environment I do:
irb(main):121:0> h = {"a" => 1, "\u0101" => 2}
=> {"a"=>1, "Ä"=>2}
irb(main):122:0> h.key? "a".tr("z", "\u0101")
=> false <--- wrong!
irb(main):123:0> h.key? "\u0101".tr("z", "\u0101")
=> true
So after I change utf-8 string without extended chars in it with tr(),
where second character set is having extended chars, new string is not
found in hash.
Boths string are same in Marshal encoding:
irb(main):124:0> Marshal.dump "a".tr("\u0101", "\u0101")
=> "\x04\bI\"\x06a\x06:\rencoding\"\nUTF-8"
irb(main):126:0> Marshal.dump "a"
=> "\x04\bI\"\x06a\x06:\rencoding\"\nUTF-8"
Question is how I should code using tr() that new string will be found
in hash?
And I think this is bug in ruby, because it is completely not expected
behavior.