From: "NARUSE, Yui" Date: 2009-09-29T16:09:35+09:00 Subject: [ruby-dev:39401] Re: [ruby-cvs:32331] Ruby:r25113 (trunk): String#inspect's encoding should be fixed. 成瀬です。 2009/09/29 14:02, Yugui wrote: > 2009年9月29日12:31 "Martin J. Dürst": >> 要するに \xXX\xXX の代わりで \x{XXXX} で「ここは一文字」を示すという小手ですよね。 >> ちょっとだけ良くなるかと思いますが、特に一バイト文字コードの場合では >> 文字コードを推測するのは難しいかと思います。 >> まー、Unicode 系に変換 したくなかったらそのぐらいしかないですよね。 >> 後は文字コードを何かの形で明 記するとか。 > > それは、\x{XXXX}の属する文字集合を明記するというようなお話なんでしょうか。 Ruby M17Nは文字集合に関する情報は持っていませんので、 やるとしたら元のエンコーディングでしょうね。 まぁ、文字ごとに表示しても以下のような感じになってしまい、 うれしいかは微妙に感じますが。 \x{XXXX}(Windows-31J)\x{XXXX}(Windows-31J)\x{XXXX}(Windows-31J) > String#inspectはエンコーディングを明記してくれると嬉しいと常々思っておりました。 > 冗長になるという反対意見もあるかと思いますが、 > エンコーディング違いで失敗したテストケースの原因を探るのに > とても役立ちます。実際、rubyspecの、Ruby 1.9を意識していない > descriptionにその手の失敗が幾つかありまして、 > これを調べるのは面倒だな、と思っていたところでした。 これ手元でちょっと試してみたんですがだめですね。 str.inspect.inspect != str.inspect になるせいで、 大量にテストが失敗します。 やっぱりrubyspec や miniunit などのテストドライバのほうで エンコーディングを表示するのが正解なように思います。 -- NARUSE, Yui