Windows環境の話ですよね。
Rubyが生まれたUnix環境では改行は"\n"
という1文字です。ところが一方、Windows環境では改行は"\r\n"
という2文字です。
Unix/Linux環境と、Windows環境でプログラムを書き換えないといけないのであれば不便なので、
「Windows環境の時は、ファイルに"\n"
を書き込むときに内部で自動的に"\r\n"
に書き換える。ファイルから読むときに"\r\n"
の連続は内部で自動的に"\n"
に置き換える。」という機能が生まれました。
これがテキストモードです。また、テキストモードには「"\x1A"
はファイルの終わりと見なす。」という機能もあります。
ただ、そうすると、内容が文字で無いファイル(画像ファイルとか)の場合に、データをそのまま自由に書けない読めない(自動的に変換されたり、ファイルの終わりとみなされたり)という問題が発生します。そこで、データを変換せずにそのまま読み書きするモードをバイナリモードとしました。
以上のことは、Rubyの発明でもWindowsが出来てからの話でも無く、1970年代の8bitマイクロコンピューター時代に、Unix上で使われていたC言語を当時の8bitOS(CP/M)に移植した際の発明です。
コマンドプロンプトで確認してもhello,world ramune.と出てきます。
"\r\n"というのはファイルの中には存在しているという事でしょうか?
Ruby
1open("file1.txt","w") do |io| #テキストモードなので、\r\n に変換されて書かれる
2 io.print "a\nb\nc\n"
3end
4open("file2.txt","wb") do |io| #バイナリモードなので、\n そのまま書かれる
5 io.print "a\nb\nc\n"
6end
で、ファイルを作ってみてそれぞれを、Windows標準のメモ帳で開いてみると違いが分かると思います。
メモ帳だと、"\r\n"
でないと改行とみなしません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/20 14:07