In-Reply-To: [ruby-list:6902] Re: inspect (mb string)

わたなべさん、おはようございます。

>>[ruby-list:6902] Re: inspect (mb string)
>>From: WATANABE Hirofumi <watanabe / ase.ptg.sony.co.jp>
>>
>>0x80 以上なら EUC とする今の仕様だと, わざわざ $KCODE を 
>>SJIS にしなくても SJIS をそれなりに扱えて意外と便利だったん
>>だけどなあ.

そういえば、これって $KCODE ではなく、入力のコードにあわせるべきですね。
もし jcode に出す事になった場合、こんなのではどうでしょうか?


--- jcode.rb.org	Sat Feb 28 21:59:31 1998
+++ jcode.rb	Tue Mar  3 16:03:25 1998
@@ -203,5 +203,33 @@
   def chop
     self.dup.chop!
   end
+
+  alias original_inspect inspect
+  private :original_inspect
+
+  def inspect
+    if $KCODE =~ /^(s|e)/i
+      kcode = 'sjis' if self =~ /[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]/n
+      require "kconv" if kcode == 'sjis'
+      self.sub!(/^.{1,80}/){Kconv.toeuc($&)} if kcode == 'sjis'
+      str = original_inspect.gsub(/\\(\d{3})/){
+              v = $1
+              if ([v.oct].pack("c") =~ /[\xa1-\xfe]/n)
+                [v.oct].pack("c")
+              else
+                "\\" + v
+              end
+            }
+      self.sub!(/^.{1,80}/){Kconv.tosjis($&)} if kcode == 'sjis'
+
+      if kcode == 'sjis'
+        Kconv.tosjis(str)
+      else
+        str
+      end
+    else
+      original_inspect
+    end
+  end
 end
 $VERBOSE = $vsave


青山 和光 Wakou Aoyama <pxn11625 / niftyserve.or.jp>