[ruby-core:104678] [Ruby master Bug#18044] unusual behavior with Arabic string in a Hash
From:
zverok.offline@...
Date:
2021-07-26 06:24:19 UTC
List:
ruby-core #104678
Issue #18044 has been updated by zverok (Victor Shepelev).
If I'll copy-paste your example literally, and then...
```ruby
foo.keys.first.chars
# => ["a", "r", "a", "b", "i", "c", ""]
foo.keys.first.chars.last.unpack('U') # => 8206
8206.to_s(16) # => 200e
```
It is [U200e](https://www.compart.com/en/unicode/U+200E) LTR mark character.
I assume it was introduced on code editing, not on hash storing, because if I'll try to edit your example (remove key and then re-enter it manually), everything works:
```ruby
foo = {"arabic" => "ٱلتَّوْبَة"}
# => {"arabic"=>"ٱلتَّوْبَة"}
foo["arabic"]
# => "ٱلتَّوْبَة"
```
----------------------------------------
Bug #18044: unusual behavior with Arabic string in a Hash
https://bugs.ruby-lang.org/issues/18044#change-92993
* Author: 0xleaf (0x leaf)
* Status: Open
* Priority: Normal
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Hey all,
I found a potential bug where looking up a key that contains an arabic string always returns "nil" instead of the string. To reproduce, run the following script
```ruby
foo = {"arabic" => "ٱلتَّوْبَة"}
p foo.keys # => ["arabic"]
p foo["arabic"] # => nil
p foo.values_at("arabic") => [nil]
foo.fetch "arabic" # Raises error with - did you mean "arabic" ?
```
Tested on:
* ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
* ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-linux]
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>