From: Tadashi Oh-Ya Date: 2005-11-20T22:13:10+09:00 Subject: [ruby-list:41573] ERB.newとJIS文字列 おおやと申します。 ERB.new にJIS文字列を与えて、result メソッドを実行してみました。 ほとんどのケースで問題なく result が返ってくるのですが、特定の文字列 で result の実行に失敗します。 なにかエスケープしなければならないのかと思い、"erb nkf jis escape" など のキーワードで検索しましたが、自力では参考になるページを見つけられません でした。 意図としては、宛先別の情報(今回はパスワード)をメールで配布するスクリプト を作ろうとしています。 今回は、「最終的にスクリプト内部で NKF を使用して JIS にしてしまえば良い」 と判断し、実際のスクリプトでは EUC で決め打ちしたファイルを読みこみ、 内部でNKF を使用して問題を回避しました。 # なぜか EUC だと通したいパターンが全て通ったので、EUC を選択しました。 ただ、最初に試した時に ERB の挙動に疑問を感じ、このような質問に至りました。 あるいは ERB の使い方が間違っているのでしょうか。 * エスケープの要/不要 * ERBの使い方自体が誤っているかどうか * その他 などについて、お気付きの点なりとご指摘いただけると嬉しいです。 自分の手元で再現できたテストとエラーメッセージを記載します。 -------------------------------ここから------------------------------- $ cat test.rb #!/usr/bin/ruby require 'erb' row = ["elem0", "elem1", "elem2", "elem3"] body = File.open("body", "r") do |io| io.gets(nil) end erb = ERB.new(body) erb.result $ cat body.tmpl パスワードは <%=row[2]%> $ nkf -e body.tmpl > body.euc $ nkf -j body.tmpl > body.jis $ cp body.euc body $ ./test.rb (エラーなし) $ cp body.jis body $ ./test.rb (erb):1: compile error (SyntaxError) (erb):1: Invalid char `\033' in expression (erb):1: syntax error _erbout = ''; _erbout.concat "\e$B%Q%9%o!"; I$O <%=row[2]; _erbout.concat "\n" ^ -------------------------------ここまで------------------------------- この他に、 -------------------------------ここから------------------------------- $ ./test.rb (erb):3: compile error (SyntaxError) (erb):3: unknown type of %string _erbout.concat (ここには "^" でエラー箇所が示された文字列が表示されています。) -------------------------------ここまで------------------------------- といったエラーも見られました。 この場合のテキストもJISでエンコードされています。