2011年4月23日

[ruby-list:48003] Re: CSV.read で読むとUTF-8の扱いがおかしい?

成瀬です。

(2011/04/15 16:37), Y. NOBUOKA wrote:
> 信岡です。
> CSV::read メソッドに関して、エンコーディングを明示的に指定してやらなければならない
> とのことですが、ちょっと気になった点があったのでその流れで質問します。
>
> CSV クラスのソースコードを見ると、読み込む CSV ファイルのエンコーディングと

> Encoding.default_external が一致しない場合は、エンコーディングを指定する必要が
> あると書かれています。
> 『This method also understands an additional <tt>:encoding</tt> 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' で
> 開けば良いように思うのですが。

コード読まずに一般論としてコメントすると、
UTF-16 など「文字」中に改行コードを含みうる文字コードへの対策や、
改行コードをライブラリ側で操作するために、バイナリモードで開く必要性がある場合はありえます。

> 2. CSV クラスのソースファイルのコメントの内容と実際の動作が異なっているわけですが、
> これはコメントが間違ってるのでしょうか? それとも動作がおかしいのでしょうか?
> (こういうのはバグ報告した方がいいのでしょうか。。)

コメントと動作が異なっている場合はどちらかが間違っているのでしょう。
で、どちらが間違っているかはケースバイケースなので、
究極的には個別にメンテナが判断することになります。

> 以上 2 点、ご存知の方がいらっしゃいましたらお願いします。
> # ruby-dev に投げたほうがいいような気もしましたが、とりあえずこちらに

Ruby 自体の話は ruby-dev の方がいいですね。
特に、Ruby 自体に変更を要求する話は Redmine の方がさらによいです。
もっというと、英語が書ける場合、lib/csv.rb は英語な人がメンテナなので、
英語だとよりありがたいです。
けど、英語がつらい場合は日本語でも、翻訳するなり勝手に直すなりするのでOK。

--
NARUSE, Yui <naruse@xxxxx>


投稿者 xml-rpc : 2011年4月23日 22:59
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103218
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。