Actions
Bug #16842
closed`inspect` prints the UTF-8 character U+0085 (NEXT LINE) verbatim even though it is not printable
Description
The UTF-8 character U+0085 (NEXT LINE) is not printable, but inspect
prints the character verbatim (within double quotation):
0x85.chr(Encoding::UTF_8).match?(/\p{print}/) # => false
0x85.chr(Encoding::UTF_8).inspect
#=> "\"
\""
My understanding is that non-printable characters are not printed verbatim with inspect
:
"\n".match?(/\p{print}/) # => false
"\n".inspect #=> "\"\\n\""
while printable characters are:
"a".match?(/\p{print}/) # => true
"a".inspect # => "\"a\""
I ran the following script, and found that U+0085 is the only character within the range U+0000 to U+FFFF that behaves like this.
def verbatim?(char)
!char.inspect.start_with?(%r{\"\\[a-z]})
end
def printable?(char)
char.match?(/\p{print}/)
end
(0x0000..0xffff).each do |i|
begin
char = i.chr(Encoding::UTF_8)
rescue RangeError
next
end
puts '%#x' % i unless verbatim?(char) == printable?(char)
end
Actions
Like0
Like0Like0Like0