From: "NARUSE, Yui" Date: 2011-04-25T13:29:43+09:00 Subject: [ruby-core:35875] Re: [Ruby 1.9 - Bug #4603][Open] lib/csv.rb: when the :encoding parameter is not provided, the encoding of CSV data is treated as ASCII-8BIT 2011/4/25 James Gray : > On Sun, Apr 24, 2011 at 1:33 AM, yu nobuoka > wrote: >> >> The document of CSV::read says "This method also understands an additional >> :encoding parameter that you can use to specify the Encoding of the data >> in the file to be read. You must provide this unless your data is in >> Encoding::default_external()." >> However, when the :encoding parameter is not provided, the encoding of the >> CSV data >> is treated as ASCII-8BIT. Not as Encoding.default_external. >> CSV::open and CSV::foreach are also similar. >> >> I think the actual behaviour of these methods doesn't conform to the >> document of these. > > It seems this was an intentional change not made by me: > r25362 | naruse | 2009-10-15 22:04:38 -0500 (Thu, 15 Oct 2009) | 2 lines > * lib/csv.rb (CSV#raw_encoding): returns ASCII-8BIT when the io > ��doesn't have encoding. > This seems like a wrong choice. �Why would we not want to support the > default encodings? �Can someone please explain to me why this was done? Ah, sorry, that commit message doesn't explain the intention. It is for IO-like object which doesn't have encoding method, for example Zlib::GzipReader test_gzip_reader_bug_fix in test/csv/test_features.rb. Anyway, even if I applied following patch, the problem is still reproduced. diff --git a/lib/csv.rb b/lib/csv.rb index 45273f9..ee35ccc 100644 --- a/lib/csv.rb +++ b/lib/csv.rb @@ -2296,7 +2296,7 @@ class CSV elsif @io.respond_to? :encoding @io.encoding else - default + Encoding.default_internal || Encoding.default_external end end end -- NARUSE, Yui �