From: antondavydov.o@... Date: 2015-11-07T19:41:15+00:00 Subject: [ruby-core:71379] [Ruby trunk - Bug #11417] Wrong description for `limit` parameter for IO#gets Issue #11417 has been updated by Anton Davydov. Ary hello! The problem in japanise characters. They are represented by 3 bytes: ~~~ StringIO.new("���������������").gets(1) # => "���" StringIO.new("���������������").gets(2) # => "���" StringIO.new("���������������").gets(3) # => "���" StringIO.new("���������������").gets(4) # => "������" ~~~ Also [I create RP](https://github.com/ruby/ruby/pull/1085) in ruby/ruby repository with updating `IO#gets` documentation. ---------------------------------------- Bug #11417: Wrong description for `limit` parameter for IO#gets https://bugs.ruby-lang.org/issues/11417#change-54751 * Author: Ary Borenszweig * Status: Open * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- 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. -- https://bugs.ruby-lang.org/