From: "usa (Usaku NAKAMURA)" <usa@...> Date: 2013-02-27T19:39:48+09:00 Subject: [ruby-dev:47122] [ruby-trunk - Bug #7881] Windows でパスに日本語を含むスクリプトからの require が失敗する Issue #7881 has been updated by usa (Usaku NAKAMURA). あれ、これはWindowsでは互換性のためにわざと常にlocaleでexpand_pathされるようにしておいたような記憶があるのですが。 そろそろこの仕様を変えるのはアリだとは思いますが、1.9.3はちょっと意図的ではないので元の挙動に戻したいです。 2.0.0は... 現状優先なのかなあ。 C:\> type a.rb # coding: utf-8 unless ''.respond_to?("encoding") class String def encoding "dummy" end end end path = File.expand_path("./a") p [path, path.encoding] C:\> ruby187p371 -v a.rb ruby 1.8.7 (2012-10-12 patchlevel 371) [i386-mswin32] ["C:/a", "dummy"] C:\> ruby193p0 -v a.rb ruby 1.9.3p0 (2011-10-30 revision 33570) [x64-mswin64_100] ["C:/a", #<Encoding:Windows-31J>] C:\> ruby193p392 -v a.rb ruby 1.9.3p392 (2013-02-22 revision 39386) [x64-mswin64_100] ["C:/a", #<Encoding:UTF-8>] C:\> ruby200p0 -v a.rb ruby 2.0.0p0 (2013-02-24 revision 39474) [x64-mswin64_100] ["C:/a", #<Encoding:UTF-8>] C:\> cd てすと C:\> ruby187p371 -v a.rb ruby 1.8.7 (2012-10-12 patchlevel 371) [i386-mswin32] ["C:/\202\304\202\267\202\306/a", "dummy"] C:\> ruby193p0 -v a.rb ruby 1.9.3p0 (2011-10-30 revision 33570) [x64-mswin64_100] ["C:/てすと/a", #<Encoding:Windows-31J>] C:\> ruby193p392 -v a.rb ruby 1.9.3p392 (2013-02-22 revision 39386) [x64-mswin64_100] ["C:/\u3066\u3059\u3068/a", #<Encoding:UTF-8>] C:\> ruby200p0 -v a.rb ruby 2.0.0p0 (2013-02-24 revision 39474) [x64-mswin64_100] ["C:/\u3066\u3059\u3068/a", #<Encoding:UTF-8>] ---------------------------------------- Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する https://bugs.ruby-lang.org/issues/7881#change-37145 Author: 5.5 (5 5) Status: Assigned Priority: Normal Assignee: h.shirosaki (Hiroshi Shirosaki) Category: core Target version: next minor ruby -v: ruby 1.9.3p385 (2013-02-06) [i386-mingw32] =begin Windows でパスに日本語を含むスクリプトからの require が失敗します。 Ruby 1.9.3 の p374,p385 でこの現象が起こりますが,p125 では起こりません。 p286 あたりから起こるようになったと思います。 【再現手順】 (1) d:/テスト というフォルダーを作る。 (2) d:/テスト/a.rb を下記のように書く。 (3) d:/テスト/b.rb を下記のように書く。 (4) cd /テスト (5) ruby a.rb a.rb の内容: # encoding: utf-8 require "./b" b.rb の内容 # encoding: utf-8 puts "No problem." これで, cannot load such file -- ./b (LoadError) が出ます。 * フォルダー名を「テスト」から「test」に変えると正常に動作します。 * a.rb のスクリプトエンコーディングを CP932 に変えると正常に動作します。 * require "./b" を require "./b".encode("CP932") に変えると正常に動作します。 * 標準添付ライブラリーや gem はふつうに require できます。 =end -- http://bugs.ruby-lang.org/