めんどくさいですねー移植は。
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 件のコメント:
コメントを投稿