藤本です、こんにちは。 #まつもとさん、むちゃくちゃ反応はやいですね。これだからついていけませ #んです (^^; すみません、Mac版の改行文字についてのさっきのメールを出したあと、確 認してみてえらい勘違いしてることに気づきました。 From: matz / netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-list:6874] Re: http_get.rb Date: Mon, 2 Mar 1998 16:37:55 +0900 > In message "[ruby-list:6873] Re: http_get.rb" > on 98/03/02, 藤本尚邦 / FUJIMOTO Hisakuni <hisa / imasy.or.jp> writes: > > | Mac版では普通は (binmode以外では) > | > | \n 0x0D、つまりMacOSでのテキスト改行文字 > | \r 0x0A、つまりUNIXでのテキスト改行文字 > | > |として扱われています(みたいです)。これはMac版で使ってるライブラリ すみません、これ僕のまったくの勘違いでした。取り消します。Mac版では、 テキストファイルを読み書きするときに(使ってるライブラリが)改行文字の変 換をしていて、ruby上ではUNIXのテキストと同じ状態になってました。 たしかに考えてみればこれでつじつまが合うのに、変換のことが頭になかっ たので、ちょこっと調べて上のように変な勘違いしてしまいました (^^; ということで、テキストモードで開いたファイルは、Macだから改行文字が 何だとか気にせず、そのままUNIX上のrubyと同様に"\n"を使って扱うことが出 来ますし、 > |#だけど、これだと"\r\n"が0x0A0Dになってしまいますね、うーん (^^; > > こうなるわけですね.うーん,MacPerlとかもそうなんだろうか…. これも僕の勘違いで、"\r\n"は0x0D0Aになります。こんどはちゃんと確認しま した。 ruby> a = "\r\n" "\r\n" ruby> a[0] 13 ruby> a[1] 10 さっきのメールで 藤本: > \nや\rのような表現が、具体的なコードを表すのか、それともある意味を持 > つ文字を抽象的に表しているのか、その点を明確にしないと何とも言えないと > ころもあります。後者だとすると"\r\n"と言う表現に0x0D0Aというバイト列を > 期待することに問題があることになるし、前者だとすると今のMac版のままだ > とまずいですね。 と書きましたがこれも取り消しです。自分の勘違いの内容に違和感を持ちつ つ、つじつま合わせのためにこんなことまで考えてしまいました (^^;。 \nや\rは0x0Aや0x0Dというコードを表し、"\r\n"は0x0D0Aというバイト列を 表すということで問題ないですね。 > | 僕の感想としては、javaを例に出すと、java.lang.system.getProperties() > |で得られるシステムプロパティのfile.separator、path.separator、 > |line.separatorに相当するようなものがrubyにあって、テキスト改行文字、 > |TCP/IPで使われる改行文字などを表すときにはそれを使うようにするのがいい > |なぁと思います。 > > それだとグローバルに変わっちゃうんで望ましくないんではないか > なあ,と思ってます.binmodeのような個別のIO毎に切替えられる えっと勘違いと絡んで「テキスト改行文字を表す表現」というのが必要だと 思ったのですが、rubyの場合"\n"がその役割を果たす、つまりテキストは内部 的にUNIXのテキストで、"\n"イコール改行文字と考えてよさそうなので、これ もとりあえず取り消します。 > |> また、binmode はあるのでしょうか? > | > | binmodeって f = File.open("filename", "rb")のbのことですよね。 > | ^ > > そうだ,というか,そうでない,というか. > > ここでのbinmodeというのはIO#binmodeというメソッドのことで, > テキストモードでオープンされたFILEをバイナリモードに設定し直 > すものです. そういうことでしたか。とくにいじってなかったのでUNIX版と同じで、つま り何もしてもせんでしたが、あとでいじることにします。 ============================================================= 藤本尚邦 FUJIMOTO Hisakuni hisa / imasy.or.jp =============================================================