LDOCEConv.rbをRuby 3.0.2で動かす

Longman Dictionary of Contemporary English (LDOCE)第3版をldoceconvEPWING変換しようとしたのですが、Ruby 1.6.4前提のため最近のRubyでは文字コード関連のエラーが出ます。

Rubyわかってませんが、以下のパッチでとりあえずRuby 3.0.2でエラーなしで変換できるようになりました。 EBStudioにかけてEBPocketやebnetd+lookup.elで引けています。

見落としあればご指摘ください。

--- LDOCEConv.rb.orig    2023-09-22 15:50:52.549623500 +0900
+++ LDOCEConv.rb    2023-10-21 09:11:26.230354900 +0900
@@ -1,2 +1,3 @@
 #!/user/local/bin/ruby -Ks
+# coding: cp932
 def showHelp; scrName = File::basename($0.gsub(/\\/, '/'));
@@ -109,3 +110,3 @@
   s.gsub!(/\\(\x10.)/) {
-    key = $1
+    key = $1.force_encoding('cp932')
     case key
@@ -224,3 +225,3 @@
     if c != nil
-      c ^= @@t[@count & 3]
+      c = (c.ord ^ @@t[@count & 3]).chr
       @count += 1
@@ -234,3 +235,3 @@
       s << c
-      break if c == 0x0a   # 改行記号は 0x0a のまま
+      break if c == "\n"   # 改行記号は 0x0a のまま
     end
@@ -397,4 +398,4 @@
     }
-    line.gsub!(/\{B7\\?#1006\}/, '▲') # signposts   #+ LDAE  \\? 追加
-    line.gsub!(/\{B8\\?#1007\}/, '▼')               #+ LDAE  \\? 追加
+    line.gsub!(/\{B7\\?#1006\}/, '▲'.force_encoding('ascii-8bit')) # signposts   #+ LDAE  \\? 追加
+    line.gsub!(/\{B8\\?#1007\}/, '▼'.force_encoding('ascii-8bit'))               #+ LDAE  \\? 追加
 
@@ -430,3 +431,3 @@
       c = $1
-      if Gaizi.key?(c)
+      if Gaizi.key?(c.force_encoding('cp932'))
         Gaizi[c]
@@ -439,3 +440,3 @@
 
-    line.gsub!(/\x0f\xde/, '⇒')  #+ LDAE
+    line.gsub!(/\x0f\xde/n, '⇒')  #+ LDAE