荻野です。

At Tue, 7 Mar 2000 07:58:19 +0900,
Wakou Aoyama <wakou / fsinet.or.jp> wrote:

> > 1) Cygwin版の Ruby は C などのように \n を改行のマクロとして扱い、出力
> > 時には CR,LF として出力するのでしょうか。または Cygwin が変換している
> > のでしょうか?
> 
> binmode() しなければ、CR+LF への変換が行われたと思います。で、今回は、
> そのあたりが原因のような気がしますので、とりあえず、入力、出力等、関係
> しそうな所に binmode() を追加して見て下さい。

これは「CGI.rb の中の関係しそうな所」で良いのでしょうか。とりあえず 
Windows 環境から Solaris へ逃げ出してしまったので、暇を見て探してみま
す。しかし、入力はエンコードされた CR+LF なのでここをなんとかすべきか
否かの問題のように思うのです。

> (入力に関しては CR や LF は url エンコードされているので、あまり影響は
> 無いように思われますから、出力の方のような気が。)

というか、binmode() しなければ出力時に CR+LF への変換が行われるのであ
れば、CGI.rb が受け取った CR+LF をそのままスクリプト本体に渡すと 
LF="\n" が出力時に変換されて CR+CR+LF になったりするのではないかという
ことです。当然 UNIX 環境の CGI でも問題(LF と CR+LF 混在?)があるはず
ですが、そこは httpd が吸収しているのでしょうか。

> HTTP(ヘッダ) は決まっていますが、データ本体には決まりはありません。し
> たがって、CGI の場合にも HTTP ヘッダは CR+LF とすべきですが、データ本
> 体に関しては、好みという程度でしょうか。

あ、すみません。これは httpd <-> Web browser 間のことですよね。それと
も CGIプログラム <-> httpd <-> Web browser 間の通信において httpd は
nph- でなくても素通しだという意味でしょうか。でも HTTP ヘッダ
("HTTP/1.0 200 OK" とか)って CGI は普通生成しないと思うのですが。

nph- でない CGI スクリプトは httpd へデータを送りますよね。この CGI
<-> httpd 間の送り方は統一的に規定されているのか、プラットフォーム依存
なのか、というつもりで書きました。

しかし、Content-Type: test/* のときでも HTTP に規定が無いのなら、CGI
<-> httpd 間は多分 httpd 依存なのでしょう。

# 文中 httpd という言い方は変ですが、MS-IIS や WebStar なども
# ひっくるめています。


> まあ、しかし、CR+LF にする場合が多いような気もします。Windows ではもち
> ろん、とりあえず unix, Mac の改行記号も含むので、どの環境でもダーっと
> 1行になって読みにくいという事が発生しないので。

ということは CGI.rb は CR+LF を受け取った場合に、それを "\n" としてく
れるほうがありがたいと思うのですが、どうでしょう。

-- 
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
名古屋大学消費生活協同組合