ruby 1.8 系で書かれたコードにcoding:utf-8が無くてエラーになる。 invalid multibyte char (US-ASCII)など出てくる
とりあえず以下をやる
alias ruby="ruby -Ku"
書き換えるのが基本ですがね。そんな悠長なことやってらんねーだわ。
マニュアル
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.htmlRuby 1.8 からの移行
Ruby 1.8 からの移行措置として、コマンドオプション -K を指定すれば Ruby 1.8 用に書かれたスクリプトもできる限り動くような仕様になっています。 ただし Ruby 1.9 には多言語化以外にも多くの非互換性が存在するので必ずしも動くとは限りません。
いずれにしても、これからは Ruby 1.9 への移行を考慮してスクリプトに非 ASCII 文字を使う場合、 マジックコメントでスクリプトエンコーディングを指定しておくのがよいでしょう。magic comment を 参照してください。
例:
スクリプトを EUC-JP で書いていて、扱うテキストも EUC-JP の場合。 => コマンドオプションに -Ke を指定。
ruby1.9は変数のスコープが関数型っぽくなってきてどうも好きになれないんだ。でも標準ライブラリが1.9系に便利なものが追加されるので、そろそろいい加減限界。。。
shebangが引込起す ruby 1.9 のエンコードエラー
Encoding::CompatibilityError: incompatible character encodings
が収まらなくて困った。本気で困ってた。いろいろ考えてみたら shebang が悪さをしていると思う。
#!/usr/bin/env ruby -Ku puts "UTF-8日本語"
$ruby -Ks test.rb UTF-8日本語
そうなんですね。Shebang オプションが優先されるんですよ。
これでさらに文字コードの修正が難解モードに。。。
http://www.ruby-lang.org/ja/old-man/html/Ruby_A4CEB5AFC6B0.html#a.a5.a4.a5.f3.a5.bf.a5.d7.a5.ea.a5.bf.b9.d4.a4.ce.b2.f2.bc.e1:tittleインタプリタ行の解釈
コマンドラインに指定したスクリプトが `#!' で始まるファイルで、そ の行に `ruby' という文字列を含まない場合、OSに代わって `#!' に続く文字列をコマンドラインとみなしてそのインタプリタを起 動します。このときコマンドラインで指定した引数はそのインタプリタに渡さ れます。
例えば、以下のシェルスクリプトを ruby で実行すると sh を起動します。
#!/bin/sh -vx echo "$@"この行に `ruby' という文字列が含まれる場合は、その文字列よ り左側は無視され、右側に `-'で始まる語があればオプションとして解 釈します。
ここで指定したオプションは、コマンドラインでの指定に追加されます。これ はそのスクリプトで指定すべきオプションを埋め込むために使います。例えば 以下の行で始まるスクリプトはコマンドラインに -Ke オプションを指 定したのと同じ効果になります。
#! ruby -Ke