Project

General

Profile

Bug #11417

Wrong description for `limit` parameter for IO#gets

Added by asterite (Ary Borenszweig) almost 5 years ago. Updated about 1 year ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:70248]

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) over 4 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) about 1 year ago

  • Status changed from Open to Closed

Also available in: Atom PDF