やっぱりエンコードが utf-8 だと xmp が動かない

elisp のコードも、Rubyスクリプトも最新版にして、直ったと思ってたけど、直ってなかった。(;_;)

以下のコードは xmp できる。

# -*- coding: utf-8; -*-
RUBY_VERSION        # => "1.9.1"

s = "\u20ac"
s.encoding          # => #<Encoding:UTF-8>

以下のコードは xmp できない。

# -*- coding: utf-8; -*-
RUBY_VERSION        # => 

s = "あいう"
s.encoding          # =>

*rct-error* バッファには以下のメッセージが、

/usr/local/lib/ruby19/gems/1.9.1/gems/rcodetools-0.8.1.0/lib/rcodetools/xmpfilter.rb:41:in `detect_rbtest': invalid byte sequence in Windows-31J (ArgumentError)
	from /usr/local/bin/xmpfilter:79:in `<main>'

Windows-31J ってのはどこから来たのかなぁ。

xmpfilter は、こんな感じで呼び出されている。*1

xmpfilter -S ruby19 --dev --detect-rbtest  xmptmp-in34241zp.rb > xmptmp-out3424C-v.rb

シェルから同じように実行すると、同様にエラーになった。

$ xmpfilter -S ruby19 --dev --detect-rbtest utf8ok.rb  # これは OK
# -*- coding: utf-8; -*-
RUBY_VERSION                    # => "1.9.1"

s = "\u20ac"
s.encoding                      # => #<Encoding:UTF-8>

$ xmpfilter -S ruby19 --dev --detect-rbtest utf8ng.rb  # こっちは NG
/usr/local/lib/ruby19/gems/1.9.1/gems/rcodetools-0.8.1.0/lib/rcodetools/xmpfilter.rb:41:in `detect_rbtest': invalid byte sequence in Windows-31J (ArgumentError)        from /usr/local/bin/xmpfilter:79:in `<main>'

この Windows-31J ってのは、ひょっとして Encoding.default_external じゃないの?

$ LANG=ja_JP.UTF-8 xmpfilter -S ruby19 --dev --detect-rbtest utf8ng.rb
# -*- coding: utf-8; -*-
RUBY_VERSION                    # => "1.9.1"

s = "あいう"
s.encoding                      # => #

動いた!!

すると xmp するファイルごとの外部エンコーディングを教えてあげないといけないのか!

rcodetools.el が作る一時ファイルは、元のスクリプトエンコーディングになっているので、xmpfilter コマンドにエンコードを教えるオプションを追加してやればいいの?*2

*1: (setq rct-debug t) すると *Messages* バッファに実行したコマンドが残る。

*2:ひょっとすると内部エンコーディングへの変換も必要かも?