[#46309] [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX — "usa (Usaku NAKAMURA)" <usa@...>

13 messages 2012/10/29
[#46310] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX — Tanaka Akira <akr@...> 2012/10/29

2012年10月29日 10:31 usa (Usaku NAKAMURA) <[email protected]>:

[#46366] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX — "U.Nakamura" <usa@...> 2012/11/02

こんにちは、なかむら(う)です。

[#46375] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX — KOSAKI Motohiro <kosaki.motohiro@...> 2012/11/02

>> とくに指定しなければ、default external は locale から設定されるので、

[ruby-dev:46269] [ruby-trunk - Feature #3328] Kernel#p outputs as default_internal encoding, and so on

From: "yhara (Yutaka HARA)" <redmine@...>
Date: 2012-10-25 12:48:30 UTC
List: ruby-dev #46269
Issue #3328 has been updated by yhara (Yutaka HARA).

Target version changed from 2.0.0 to next minor


----------------------------------------
Feature #3328: Kernel#p outputs as default_internal encoding, and so on
https://bugs.ruby-lang.org/issues/3328#change-31569

Author: tarui (Masaya Tarui)
Status: Assigned
Priority: Normal
Assignee: tarui (Masaya Tarui)
Category: core
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
 :あ
 :あ
 :あ
 /あ/
 /あ/
 /あ/
 #<Encoding::CompatibilityError: incompatible character encodings: UTF-8 and EUC-JP>
 #<Encoding::CompatibilityError: incompatible character encodings: UTF-8 and EUC-JP>
 
 >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



-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next