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>