2011/4/25 James Gray <james / graysoftinc.com>:
> On Sun, Apr 24, 2011 at 1:33 AM, yu nobuoka <nobuoka / r-definition.com>
> wrote:
>>
>> The document of CSV::read says "This method also understands an addition=
al
>> :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 t=
he
>> 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
> =A0=A0doesn't have encoding.
> This seems like a wrong choice. =A0Why would we not want to support the
> default encodings? =A0Can 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

--=20
NARUSE, Yui =A0<naruse / airemix.jp>