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 が失敗する
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