From: mame@... Date: 2017-11-27T07:57:47+00:00 Subject: [ruby-dev:50321] [Ruby trunk Feature#3328][Rejected] Kernel#p outputs as default_internal encoding, and so on Issue #3328 has been updated by mame (Yusuke Endoh). Status changed from Assigned to Rejected 望みがなさそうなので一旦閉じます。 たるいさん、もしまだこれが必要とお思いでしたら、なんかファシリテートをお願いします。 (わりと Unicode 世界制覇の理想郷に近づいてきたんですかね。2.0 で Unicode デフォルトになったし) ---------------------------------------- Feature #3328: Kernel#p outputs as default_internal encoding, and so on https://bugs.ruby-lang.org/issues/3328#change-67927 * Author: tarui (Masaya Tarui) * Status: Rejected * Priority: Normal * Assignee: tarui (Masaya Tarui) * Target version: next minor ---------------------------------------- =begin 樽家です。 Feature #2102 [ruby-dev:39343] でString#inspectについては強制的にencodingを揃えるようになりましたが、SymbolやRegexpについてはそうなっておらず、同じような簡単にエラーになる状態になっています。ユーザー定義のinspectにも同様です。またにinspectで文字コードの違いが区別できません。 そこで、Kernel#pで表示する前やArrayやHashで各inspect結果をマージする前に、String#inspectと同様な処理を行うのはどうでしょうか?具体的にはinspectで想定するEncodingと異なる場合に、非ASCII文字をエスケープ表示にするString#inspect_encodeを追加し、それをrb_inspectから呼ぶ事を提案したいと思います。ASCII文字については手を加えないため、不可逆ですが実用上は問題ないと思います。 ご検討をお願いします。 以下に現状と提案後の結果、Kernel#pの定義の変更を示します。 またこの変更を行うpatchを添付します。 >cat inspect.rb # -*- encoding: utf-8 -*- Encoding.default_external = "WINDOWS-31J" STDOUT.set_encoding "WINDOWS-31J" a = "あ" su = a.intern se = a.encode("euc-jp").intern sw = a.encode("windows-31j").intern ru= /#{a}/ re= /#{a.encode("euc-jp")}/ rw= /#{a.encode("windows-31j")}/ hash = { su => se } p su,se,sw,ru,re,rw p hash rescue p $! p [ru,re,rw,su,se,sw] rescue p $! >ruby_org inspect.rb :あ :あ :あ /あ/ /あ/ /あ/ # # >ruby_new inspect.rb :\u3042 :\x{A4A2} :あ /\u3042/ /\x{A4A2}/ /あ/ {:\u3042=>:\x{A4A2}} [/\u3042/, /\x{A4A2}/, /あ/, :\u3042, :\x{A4A2}, :あ] また、 Encoding.default_external = "WINDOWS-31J" STDOUT.set_encoding "WINDOWS-31J" class A ;def inspect ; "あ".encode("euc-jp") end ; end p A.new puts A.new.inspect puts A.new.inspect.inspect_encode の結果が \x{A4A2} あ \x{A4A2} となり、pの定義が少し変わります。 =end ---Files-------------------------------- patch (4.68 KB) -- https://bugs.ruby-lang.org/