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/