From: "青山 和光" Date: 1998-03-02T07:17:31+09:00 Subject: [ruby-list:6860] inspect (mb string) 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