Bug #7562

__FILE__ encoding in Windows

Added by Masaya Tarui over 2 years ago. Updated over 2 years ago.

[ruby-dev:46738]
Status:Closed
Priority:Normal
Assignee:Usaku NAKAMURA
ruby -v:ruby 2.0.0dev (2012-12-15 trunk 38381) [x64-mswin64_100] Backport:

Description

ですが、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

よろしくお願いいたします。

Associated revisions

Revision 38474
Added by Usaku NAKAMURA over 2 years ago

  • ruby.c (load_file_internal): use original C string as the filename for parser. reported by whiteleaf at [Bug #7562]

Revision 38474
Added by Usaku NAKAMURA over 2 years ago

  • ruby.c (load_file_internal): use original C string as the filename for parser. reported by whiteleaf at [Bug #7562]

History

#1 Updated by Masaya Tarui over 2 years ago

肝心の元報告者の名前の部分がメールの引用から抜けていました。
失礼いたしました。

whiteleaf さんです。

#2 Updated by Usaku NAKAMURA over 2 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r38474.
Masaya, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • ruby.c (load_file_internal): use original C string as the filename for parser. reported by whiteleaf at [Bug #7562]

#3 Updated by Usaku NAKAMURA over 2 years ago

とりあえず、意図せざる変更だったのはそうなので、1.9相当の挙動になるように変更しました。

なお、1.9もそうですが、Windowsで、かつ、localeとfilesystem encodingが異なる場合、その2つのエンコーディングで異なるバイト列になる文字を含むファイル名に関しては問題が発生するとは思います。
if $0 == FILE というイディオムを殺さずに解決してかつfeature freezeを突破する鮮やかな方法が思いつかないので、その問題についてはまたいつか誰かが踏むまで忘れることにします。

Also available in: Atom PDF