From: "Y. NOBUOKA" Date: 2011-04-15T16:37:38+09:00 Subject: [ruby-list:47975] Re: CSV.read で読むとUTF-8の扱いがおかしい? 信岡です。 CSV::read メソッドに関して、エンコーディングを明示的に指定してやらなければならない とのことですが、ちょっと気になった点があったのでその流れで質問します。 CSV クラスのソースコードを見ると、読み込む CSV ファイルのエンコーディングと Encoding.default_external が一致しない場合は、エンコーディングを指定する必要が あると書かれています。 『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().』 [1] [1] http://rxr.whitequark.org/mri/source/lib/csv.rb#1390 しかし、実際には Encoding.default_external がなんであれ、エンコーディングを指定しなければ 読み込まれたデータは ASCII-8BIT になってしまいます。 これは、ファイルを開く際のモードがバイナリモード (第 2 引数 'rb' になっている) になっている からなわけですが、 1. CSV ファイルをバイナリモードで開く必要性はあるのでしょうか? 単純に mode 'r' で 開けば良いように思うのですが。 2. CSV クラスのソースファイルのコメントの内容と実際の動作が異なっているわけですが、 これはコメントが間違ってるのでしょうか? それとも動作がおかしいのでしょうか? (こういうのはバグ報告した方がいいのでしょうか。。) 以上 2 点、ご存知の方がいらっしゃいましたらお願いします。 # ruby-dev に投げたほうがいいような気もしましたが、とりあえずこちらに -- 信岡 ゆう (NOBUOKA Yu)