それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby1.8系のソースを手っ取り早く 1.9系で動かす。

ruby 1.8 系で書かれたコードにcoding:utf-8が無くてエラーになる。 invalid multibyte char (US-ASCII)など出てくる

とりあえず以下をやる

alias ruby="ruby -Ku"

書き換えるのが基本ですがね。そんな悠長なことやってらんねーだわ。

マニュアル

Ruby 1.8 からの移行

Ruby 1.8 からの移行措置として、コマンドオプション -K を指定すれば Ruby 1.8 用に書かれたスクリプトもできる限り動くような仕様になっています。 ただし Ruby 1.9 には多言語化以外にも多くの非互換性が存在するので必ずしも動くとは限りません。

いずれにしても、これからは Ruby 1.9 への移行を考慮してスクリプトに非 ASCII 文字を使う場合、 マジックコメントでスクリプトエンコーディングを指定しておくのがよいでしょう。magic comment を 参照してください。

例:

スクリプトを EUC-JP で書いていて、扱うテキストも EUC-JP の場合。 => コマンドオプションに -Ke を指定。
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html


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 オプションが優先されるんですよ。
これでさらに文字コードの修正が難解モードに。。。

インタプリタ行の解釈

コマンドラインに指定したスクリプトが `#!' で始まるファイルで、そ の行に `ruby' という文字列を含まない場合、OSに代わって `#!' に続く文字列をコマンドラインとみなしてそのインタプリタを起 動します。このときコマンドラインで指定した引数はそのインタプリタに渡さ れます。

例えば、以下のシェルスクリプトruby で実行すると sh を起動します。

#!/bin/sh -vx
echo "$@"

この行に `ruby' という文字列が含まれる場合は、その文字列よ り左側は無視され、右側に `-'で始まる語があればオプションとして解 釈します。

ここで指定したオプションは、コマンドラインでの指定に追加されます。これ はそのスクリプトで指定すべきオプションを埋め込むために使います。例えば 以下の行で始まるスクリプトはコマンドラインに -Ke オプションを指 定したのと同じ効果になります。

#! ruby -Ke
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


ruby1.9エンコード関連変更は Fuckin'だと思います。