ruby-trunk-changes r29435 - r29442

今日は祝日でしたね。あっというまに終わってしまいましたけど……。さて、今日は文字エンコーディング関連のコミットが多いです。

naruse:r29435 2010-10-11 06:29:29 +0900

rb_io_set_encoding においてオブジェクトの型が T_FILE (組み込みの IO クラスを継承するクラスのインスタンスの内部表現の型)でない時に rb_funcall2 を使って "set_encoding" メソッドを呼び出している。rb_io_set_encoding 自体 IO#set_encoding の実装なのでそこでは常に T_FILE のはず。rb_stdio_set_default_encoding 経由で呼ばれた時に $stdin, $stdout, $stderr 等が別のクラス(たとえば StringIO)にすりかえられていた時のためと思われます。

  • r オプションでロードするライブラリ内で $stdin 等を Tempfile や StringIO にすりかえると [BUG] で落ちる不具合が元みたいです。[ruby-dev:42356]

svn:r29436 2010-10-11 06:29:31 +0900

version.h の日付変更。

naruse:r29437 2010-10-11 06:54:22 +0900

StringIO#set_encoding に IO と同じく第2引数の internal_encoding の指定とオプションのハッシュ引数(共に省略可能)を追加しています。

naruse:r29438 2010-10-11 14:15:03 +0900

SystemCallError の子クラスである例外(Errno::E??? というやつ)の message にはロケールに依存した Encoding を設定するように。[ruby-dev:42358]

naruse:r29439 2010-10-11 17:43:31 +0900

ロケールが US-ASCII でも実際のメッセージの eoncoding が US-ASCII でなかったらそちらを優先するようにしています。

naruse:r29442 2010-10-11 20:23:35 +0900

Net::HTTP.get で content-encoding が "gzip" の時に取得した HTTPResponce.body の encoding を ASCII-8BIT に指定。
ちなみに元ネタは2ちゃんねるの書きこみ。2ちゃんねるもちゃんと観測されているんですね。