2014-07-28

Ruby 1.8/1.9 移植:ファイルの文字コードは面倒だがバイナリファイルならとりあえず話は簡単

めんどくさいですねー移植は。

Ruby 1.9 から String に文字コードが属性としてもたれるようになりました。
それは、まあ、いいことなのでしょうが、文字コードとして正しくないバイト列
を String にしようとすると例外が飛びます。
入出力というか、 IO#read は、まさしくバイト列から String を作る処理なの
で、悪いバイト列を読むとアプリが爆死します。
もちろん例外を rescue で受け止めればいいのですが、受け止めて見たところで
バイト列は失われていて分析も復旧もできません。

どうしろというのでしょう。

答は、たぶん、文字コード ASCII-8BIT としてファイルを開くことなのです。い
や、ぼくはバイナリがみたいんだから。

やりかたですが、File オブジェクトが遠くから渡ってくるならば、 IO#binmode
指令を打ち込むというのが手です。
STDIN はそうするしかないと思います。

もういっこ、簡単で、Ruby 1.8 コンパチブルな方法は、 b オプションつまり
File.open(filename, "rb") で開くことです。
もともと、そうすべきだったんです。
改行コードのことはあきらめましょう。もう、 CR 改行のファイルはないはずです。

0 件のコメント:

コメントを投稿