[#45988] 質問:IO#set_encoding 後の IO#gets について — Dice <rubyist@...>
Diceです。
4 messages
2009/05/02
[#46005] [ANN] locale-2.0.3, locale_rails-2.0.3, gettext-2.0.3, gettext_activerecord-2.0.3, gettext_rails-2.0.3 — Masao Mutoh <mutomasa@...>
むとうです。
3 messages
2009/05/09
[#46014] 複数バージョンのRubyに対応するRSS::Makerの使い方 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
4 messages
2009/05/13
[#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>
[#46040] RoR on Linux で MS-SQL にアクセスしたい
— しん <dezawa@...>
2009/05/28
出沢@神奈川です
[ruby-list:45989] Re: 質問:IO#set_encoding 後の IO#gets について
From:
"NARUSE, Yui" <naruse@...>
Date:
2009-05-02 21:02:48 UTC
List:
ruby-list #45989
成瀬です。 Dice wrote: > 環境は ruby 1.9.1 (2009-01-30 revision 21907) [i386-mswin32] です。 > -------- > <ascii mode> > "line 1\n" > "line 2\n" > nil > "line 1\n" > "\n" > "line 2\n" > -------- > > ここで ascii mode の出力5行目は、なぜ "line 2\n" ではなく "\n" なのでしょうか? * Windows環境では、改行はCRLFである * Ruby 1.9.1のASCII MODEではuniversal newlineがデフォルトでON なのが原因です。 universal newlineの解説がそもそもないのがバグっぽい。 要は\rも\r\nも読み込んだ時点で\nにしちゃうってやつです。 http://www.garbagecollect.jp/~usa/d/200808c.html#id20080825_P1 るりまには書いておくようにします。 このtest.txtは"line 1\r\nline 2\r\n"という内容です。 universal newlineがONの場合、最初のinput.getsの後、 カーソルは\rの直後に来ます。 このときに、Rubyは状態として「CRの直後である」と覚えておきます。 で、通常は次のgetsの時に、\nが最初に来た場合、これを捨てます。 で、このときにset_encodingを読んだ場合です。 set_encodingはエンコーディング変換周りの状態を全てリセットします。 よって、\nを捨てずにそのまま出力してしまうわけです。 結局の所、この挙動については、読み込み中のset_encodingは動作を保証しない ということになります。 -- NARUSE, Yui <naruse@airemix.jp>