From: "usa (Usaku NAKAMURA)" Date: 2012-12-20T00:16:19+09:00 Subject: [ruby-dev:46773] [ruby-trunk - Bug #7562] __FILE__ encoding in Windows Issue #7562 has been updated by usa (Usaku NAKAMURA). とりあえず、意図せざる変更だったのはそうなので、1.9相当の挙動になるように変更しました。 なお、1.9もそうですが、Windowsで、かつ、localeとfilesystem encodingが異なる場合、その2つのエンコーディングで異なるバイト列になる文字を含むファイル名に関しては問題が発生するとは思います。 if $0 == __FILE__ というイディオムを殺さずに解決してかつfeature freezeを突破する鮮やかな方法が思いつかないので、その問題についてはまたいつか誰かが踏むまで忘れることにします。 ---------------------------------------- Bug #7562: __FILE__ encoding in Windows https://bugs.ruby-lang.org/issues/7562#change-34868 Author: tarui (Masaya Tarui) Status: Closed Priority: Normal Assignee: usa (Usaku NAKAMURA) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-12-15 trunk 38381) [x64-mswin64_100] [ruby-list:49085] ですが、bugっぽいので勝手にバグ登録させていただきます。 trunkでも同じでした。 --- Ruby2.0.0 の挙動について疑問があるので質問させて頂きます。 WindowsXP上のコンソールからパスに日本語を含むスクリプトを起動した場合に、 __FILE__ のエンコーディング(String#encoding がではなくデータ的な意味で) が UTF-8 になるのは仕様変更なのでしょうか。(コンソールから指定した部分だけが化ける) (実行バイナリは arton さんの http://www.artonx.org/data/asr/Ruby-2.0.0.msi を使用) # テストスクリプト(D:\日本語\あいうえお.rb) f0 = File.expand_path($0) puts "$0:#{f0},#{f0.encoding}" file = File.expand_path(__FILE__) puts "__FILE__:#{file},#{file.encoding}" ■パターン1(ファイルだけ指定) D:\日本語>ruby -v あいうえお.rb ruby 2.0.0dev (2012-11-01) [i386-mswin32_100] $0:D:/日本語/あいうえお.rb,Windows-31J __FILE__:D:/日本語/縺ゅ>縺・∴縺・rb,Windows-31J ■パターン2(フルパスで指定) D:\日本語>ruby -v D:\日本語\あいうえお.rb ruby 2.0.0dev (2012-11-01) [i386-mswin32_100] $0:D:/日本語/あいうえお.rb,Windows-31J __FILE__:D:/譌・譛ャ隱・縺ゅ>縺・∴縺・rb,Windows-31J ■参考(Ruby1.9.3) jobs:0 $ ruby -v あいうえお.rb ruby 1.9.3dev (2011-05-08) [i386-mingw32] $0:D:/日本語/あいうえお.rb,Windows-31J __FILE__:D:/日本語/あいうえお.rb,Windows-31J よろしくお願いいたします。 -- http://bugs.ruby-lang.org/