安達@沖データと申します。

配送されているのを、全部読まずにリプライして無駄なのを出してしまいまし
た。ごめんなさい。

ということで、rot-13/47の方で再チャレンジなんですが、kconvモジュールで
いわゆる半角カタカナを変換するとSS2(0x8e)が0xbcに化けるのは、これって
仕様なんでしょうか?下のコードでは、0x8eに戻していますが。

#内部コードにするのであれば、EUCの規定では0x00xxの形になるはずなので、
#ファイルコードのまま処理していると仮定しています。
--
#! /usr/local/bin/ruby

require 'kconv'

def rot13 (s)
  s.tr("A-Za-z", "N-ZA-Mn-za-m")
end

def rot_13ja47(s)
  r = Array.new
  b1 = nil
  b2 = nil
  e = Kconv::toeuc(s)
  e.each_byte { | b |
    p "##EUC: #{b} ##"
  } if ($DEBUG)
  e.scan (/[A-Za-z]|[\xA1-\xFe][\xA1-\xFE]|\xbc[\xA1-\xFE]/o) { | c |
    print "##(1) #{c} ##\n" if ($DEBUG)
    if (c =~ /[A-Za-z]/o)
      r.push(rot13(c))
      next
    end
    c[0] = 0x8e if (c[0] == 0xbc)
    c[1] = ((((c[1] & 0x7f) - 32 + 47) % 94) + 32) | 0x80
    print "##(2) #{c} ##\n" if ($DEBUG)
    r.push(c)
  }
  r.join('')
end

p "(0) あいうえおかきくけこ"
p "(1) ==> #{rot_13ja47('あいうえおかきくけこ')}"
p "(2) ==> #{rot_13ja47(rot_13ja47('あいうえおかきくけこ'))}"
p "(0) 亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓"
p "(1) ==> #{rot_13ja47('亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓')}"
p "(2) ==> #{rot_13ja47(rot_13ja47('亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓'))}"
p "(0) abcdefg天気晴朗なれど波高し。HIJKLMN"
p "(1) ==> #{rot_13ja47('abcdefg天気晴朗なれど波高し。HIJKLMN')}"
p "(2) ==> #{rot_13ja47(rot_13ja47('abcdefg天気晴朗なれど波高し。HIJKLMN'))}"

kana = Array.new
(0xb1 .. 0xba).each { | b |
  kana.push "#{0x8e.chr}#{b.chr}"
}
p "(0) #{kana.join('')}"
p "(1) ==> #{rot_13ja47(kana.join(''))}"
p "(2) ==> #{rot_13ja47(rot_13ja47(kana.join('')))}"
--
*------*				adachi / okidata.co.jp
|人∧鷲|				沖データ 第一研究所
| <女> |				安達 淳
|牛∨獅|
*------*