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