p [255,252,24,255,252,32,255,252,35,255,252,39].pack("c*")

こんなのの出力がおかしかったので、inspect の日本語の扱いを jcode.rb
に移してみました。


--- string.c.org	Sat Feb 28 21:50:59 1998
+++ string.c	Sat Feb 28 23:16:33 1998
@@ -1375,12 +1375,7 @@
 
     while (p < pend) {
 	UCHAR c = *p++;
-	if (ismbchar(c) && p < pend) {
-	    CHECK(2);
-	    *b++ = c;
-	    *b++ = *p++;
-	}
-	else if (c == '"') {
+	if (c == '"') {
 	    CHECK(2);
 	    *b++ = '\\';
 	    *b++ = '"';


--- jcode.rb.org	Sat Feb 28 21:59:31 1998
+++ jcode.rb	Sun Mar  1 11:26:02 1998
@@ -203,5 +203,36 @@
   def chop
     self.dup.chop!
   end
+
+  alias original_inspect inspect
+  private :original_inspect
+
+  def inspect
+    if $KCODE =~ /^s/i
+      require "kconv"
+      self.sub!(/^.{1,80}/){Kconv.toeuc($&)}
+      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($&)}
+      Kconv.tosjis(str)
+    elsif $KCODE =~ /^e/i
+      original_inspect.gsub(/\\(\d{3})/){
+        v = $1
+        if ([v.oct].pack("c") =~ /[\xa1-\xfe]/n)
+          [v.oct].pack("c")
+        else
+          "\\" + v
+        end
+      }
+    else
+      original_inspect
+    end
+  end
 end
 $VERBOSE = $vsave


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