Project

General

Profile

Actions

Bug #20416

open

IO#read doesn't preserve buffer encoding if `maxlen = nil`

Added by andrykonchin (Andrew Konchin) 21 days ago. Updated 21 days ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:117470]

Description

IO#read(nil, buffer) doesn't change buffer's encoding, but it does when maxlen parameter is specified:

buffer = "".encode(Encoding::ISO_8859_1)
p File.open("test.rb").read(1000, buffer).encoding # => #<Encoding:ISO-8859-1>

buffer = "".encode(Encoding::ISO_8859_1)
p File.open("test.rb").read(nil, buffer).encoding  # => #<Encoding:UTF-8>

I would expect changing buffer encoding in all the cases.

Actions #2

Updated by Eregon (Benoit Daloze) 21 days ago

  • Description updated (diff)

Updated by byroot (Jean Boussier) 21 days ago

I git blamed this behavior all the way down to 2007, by @matz (Yukihiro Matsumoto): https://github.com/ruby/ruby/commit/0ca7036682dad1caea4e7a4fe8fd908d94c878e8 and it seems deliberate

* io.c (read_all): should associate default external encoding.
* io.c (io_read): should NOT associate default external encoding.
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0