Rubyのエンコーディングの実験
いつのまにか標準入力からのスクリプトはlocale依存になっているようだ。
「-Ke」や「-E EUC-JP」ではrequireされるスクリプトのエンコーディングまでは反映されない。グローバルじゃないのね。
一方、magic commentをつけたスクリプトをrequireすると「-Kn」であってもきちんとエンコーディングを認識してくれる。
IOのエンコーディングもlocaleからなのかな。
$ cat euc.rb p "あいうえおかきくけこさしすせそ".encoding $ echo $LANG ja_JP.eucJP $ ruby190 -v euc.rb ruby 1.9.0 (2007-12-25 revision 14709) [i686-linux] #<Encoding:ASCII-8BIT> $ ruby190 < euc.rb #<Encoding:ASCII-8BIT> $ ruby19 -v euc.rb ruby 1.9.0 (2008-01-24 revision 0) [i686-linux] #<Encoding:ASCII-8BIT> $ ruby19 < euc.rb #<Encoding:EUC-JP> $ ruby19 -Ke -reuc -e '' #<Encoding:ASCII-8BIT> $ ruby190 -Ke -reuc -e '' #<Encoding:ASCII-8BIT> $ ruby19 -E EUC-JP -reuc -e '' #<Encoding:ASCII-8BIT> $ ruby190 -E EUC-JP -reuc -e '' #<Encoding:ASCII-8BIT> $ cat euc2.rb # -*- coding: euc-jp -*- p "あいうえおかきくけこさしすせそ".encoding $ ruby19 -reuc2 -e '' #<Encoding:EUC-JP> $ ruby19 -Kn -reuc2 -e '' #<Encoding:EUC-JP> $ ruby19 -e 'p File.read("euc.rb").encoding' #<Encoding:EUC-JP> $ ruby19 -Kn -e 'p File.read("euc.rb").encoding' #<Encoding:ASCII-8BIT> $ ruby19 -e 'puts File.read("euc.rb")' p "あいうえおかきくけこさしすせそ".encoding $ ruby19 -Kn -e 'puts File.read("euc.rb")' p "あいうえおかきくけこさしすせそ".encoding $ nkf -w euc.rb > utf8.rb $ ruby19 -e 'p File.read("utf8.rb").encoding' #<Encoding:EUC-JP> $ ruby19 -e 'puts File.read("utf8.rb")' | nkf --guess UTF-8 $ ruby19 -Kn -e 'puts File.read("utf8.rb")' | nkf --guess UTF-8