Actions
Bug #21450
closedInconsistent `upcase` between `String` and `Symbol`
Description
Behavior for Symbol#upcase
and String#upcase
differs for i
character if the :turkic
option is present
I'd expect val.upcase(:turkic)
behaves consistently for both cases:
'i'.upcase(:turkic)
# "İ" with dot
:i.upcase(:turkic)
# :I no dot
However, when a non-ASCII character is present, then the case mapping on Symbol
works the same way as with String
:
:iФ.upcase(:turkic)
# :İФ # with dot
'iФ'.upcase(:turkic)
# "İФ" # with dot
Updated by Stranger6667 (Dmitry Dygalo) about 1 month ago
- Description updated (diff)
Updated by Stranger6667 (Dmitry Dygalo) about 1 month ago
- Description updated (diff)
Updated by nobu (Nobuyoshi Nakada) about 1 month ago
· Edited
- Status changed from Open to Closed
That difference is because of the difference of encodings.
The string "i"
is UTF-8, even it contains ASCII 7bit characters only, because the source encoding is defaulted to UTF-8.
On the other hand, the encoding of :i
, the symbol that contains ASCII 7bit characters only is US-ASCII.
"i".encoding #=> #<Encoding:UTF-8>
:i.encoding #=> #<Encoding:US-ASCII>
The string in US-ASCII does the same behavior as the symbol.
"i".encode("us-ascii").upcase(:turkic) #=> "I"
Actions
Like0
Like0Like0Like0