Actions
Bug #18956
closedKernel#sprintf - %c handles negative Integer argument in a confusing way
Description
Integer argument for %c
means a character codepoint.
I've noticed two outcomes when argument is negative:
- exception
- broken/incorrect string
When exception is raised - its message a bit misleading and confusing:
sprintf("%c", -1000)
# => invalid character (ArgumentError)
sprintf("%c".encode('ascii'), -1)
# => 4294967295 out of char range (RangeError)
invalid character
means there is a character, but actual argument is a codepoint. 4294967295 out of char range
is about codepoint, but it mentions 4294967295
instead of actual argument -1
.
sprintf("%c", -1)
# => "\xFF"
In this case no exception is risen but the string is not valid:
sprintf("%c", -1).codepoints
# => invalid byte sequence in UTF-8 (ArgumentError)
sprintf("%c", -1).valid_encoding?
# => false
Actions
Like0
Like0Like0Like0