Longman Dictionary of Contemporary English (LDOCE)第3版をldoceconvでEPWING変換しようとしたのですが、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