Actions
Bug #11417
closedWrong description for `limit` parameter for IO#gets
Description
It says:
"If the first argument is an integer, or optional second argument is given, the returning string would not be longer than the given value in bytes."
But:
require "stringio"
io = StringIO.new "こんにちは"
string = io.gets(1)
puts string #=> "こ"
puts string.bytes.length #=> 3
The returning value number of bytes (3) is longer than the given value (1), so it contradicts the description.
I guess the implementation reads chars until the total number of bytes read is equal or bigger than the limit.
But I don't know how to describe this behaviour in a way that's clear to the user.
Updated by davydov_anton (Anton Davydov) almost 9 years ago
Ary hello!
The problem in UTF-8 encoding. For example japanese characters are represented by 3 bytes:
StringIO.new("こんにちは").gets(1) # => "こ"
StringIO.new("こんにちは").gets(2) # => "こ"
StringIO.new("こんにちは").gets(3) # => "こ"
StringIO.new("こんにちは").gets(4) # => "こん"
Also I created RP in ruby/ruby repository where I updated IO#gets
documentation.
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- Status changed from Open to Closed
This was fixed in 965e9df38045594d126991e6a109c5746242d2ba.
Actions
Like0
Like0Like0