[#46033] cgi をするときのデバック方法について — Nobuyuki Inaba <nobuyuki.inaba@...>

稲葉と申します。

15 messages 2009/05/22
[#46034] Re: cgi をするときのデバック方法について — rubikitch@... 2009/05/23

From: Nobuyuki Inaba <nobuyuki.inaba@gmail.com>

[ruby-list:45988] 質問:IO#set_encoding 後の IO#gets について

From: Dice <rubyist@...>
Date: 2009-05-02 12:22:26 UTC
List: ruby-list #45988
Diceです。

ruby 1.9.1 での IO について、よく分からない動作を見つけたのですが
私の勘違いなのか ruby 本体のバグなのか、今ひとつ判断がつきかねるので
こちらで質問させてください。
環境は ruby 1.9.1 (2009-01-30 revision 21907) [i386-mswin32] です。


次のようなスクリプトをファイルに保存して……

--------
open('test.txt', 'w'){|f|
	f.write(<<TEXT)
line 1
line 2
TEXT
}

open('test.txt', 'r:us-ascii'){|input|
	puts "<ascii mode>"
	
	p input.gets
	p input.gets
	p input.gets
	input.rewind
	
	p input.gets
	input.set_encoding('us-ascii')
	p input.gets
	p input.gets
	input.rewind
}


open('test.txt', 'rb:us-ascii'){|input|
	puts "<binary mode>"
	
	p input.gets
	p input.gets
	p input.gets
	input.rewind
	
	p input.gets
	input.set_encoding('us-ascii')
	p input.gets
	p input.gets
	input.rewind
}
--------

このスクリプトを ruby で実行すると、次のように出力されます。

--------
<ascii mode>
"line 1\n"
"line 2\n"
nil
"line 1\n"
"\n"
"line 2\n"
<binary mode>
"line 1\r\n"
"line 2\r\n"
nil
"line 1\r\n"
"line 2\r\n"
nil
--------

ここで ascii mode の出力5行目は、なぜ "line 2\n" ではなく "\n" なのでしょうか?


--------------------------------
Dice
tetradice+ruby@gmail.com

In This Thread

Prev Next