Issue #7881 has been reported by 5.5 (5 5). ---------------------------------------- Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する https://bugs.ruby-lang.org/issues/7881 Author: 5.5 (5 5) Status: Open Priority: Normal Assignee: Category: Target version: 1.9.3 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
on 2013-02-19 03:37
on 2013-02-22 00:55
Issue #7881 has been updated by ko1 (Koichi Sasada). Category set to core Assignee set to usa (Usaku NAKAMURA) usa さんか naruse さんかわからなかったんですが、とりあえず usa さんへアサイン。 ---------------------------------------- Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する https://bugs.ruby-lang.org/issues/7881#change-36728 Author: 5.5 (5 5) Status: Open Priority: Normal Assignee: usa (Usaku NAKAMURA) Category: core Target version: 1.9.3 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
on 2013-02-25 07:16
Issue #7881 has been updated by usa (Usaku NAKAMURA). Status changed from Open to Assigned Assignee changed from usa (Usaku NAKAMURA) to h.shirosaki (Hiroshi Shirosaki) なんとなく、いつぞやのWindowsのrequire高速化関連のような気もするのですが、 しろさきさん何かわかったりしますか? # その前の奴かなあ? ---------------------------------------- Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する https://bugs.ruby-lang.org/issues/7881#change-36984 Author: 5.5 (5 5) Status: Assigned Priority: Normal Assignee: h.shirosaki (Hiroshi Shirosaki) Category: core Target version: 1.9.3 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
on 2013-02-27 11:09
Issue #7881 has been updated by h.shirosaki (Hiroshi Shirosaki).
=begin
Windowsのexpand_pathのencodingのバグのようです。
osxだとcurrent
directoryのpathに日本語を含むかどうかでencodingがかわるので、Windowsもそのように修正したいと思います。
$ cat test_expand_path.rb
# coding: sjis
p File.expand_path("./a")
p File.expand_path("./a").encoding
$ ruby -v test_expand_path.rb
ruby 2.1.0dev (2013-02-27 trunk 39526) [x86_64-darwin12.2.0]
"/Users/hiroshi/work/a"
#<Encoding:Windows-31J>
$ cd あああ
$ ruby -v ../test_expand_path.rb
ruby 2.1.0dev (2013-02-27 trunk 39526) [x86_64-darwin12.2.0]
"/Users/hiroshi/work/あああ/a"
#<Encoding:UTF-8>
=end
----------------------------------------
Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する
https://bugs.ruby-lang.org/issues/7881#change-37143
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
on 2013-02-27 11:41
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
on 2013-02-27 12:38
Issue #7881 has been updated by h.shirosaki (Hiroshi Shirosaki). usa (Usaku NAKAMURA) wrote: > あれ、これはWindowsでは互換性のためにわざと常にlocaleでexpand_pathされるようにしておいたような記憶があるのですが。 > 1.9.3のunixでは常にlocaleになるように修正されていましたが、windowsではbackportするときには、そのまま(2.0.0と同じ)で手は入れられていないのではないでしょうか。 encodingを常にfile system encodingにするのは、たぶん以下の行以降のcpとpath_encodingをfile system encodingにすればよいと思います。 https://github.com/ruby/ruby/blob/trunk/win32/file.c#L584 > そろそろこの仕様を変えるのはアリだとは思いますが、1.9.3はちょっと意図的ではないので元の挙動に戻したいです。 > 2.0.0は... 現状優先なのかなあ。 > > 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>] trunkのosxでの動作から考えると、このencodingがWindows-31Jになるのがよいと思ったのですが、現状がよいのでしょうか? ---------------------------------------- Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する https://bugs.ruby-lang.org/issues/7881#change-37148 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
on 2013-02-28 09:56
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B
In message "[ruby-dev:47123] [ruby-trunk - Bug #7881] Windows
$B$G%Q%9$KF|K\8l$r4^$`%9%/%j%W%H$+$i$N(B require $B$,<:GT$9$k(B"
on Feb.27,2013 20:38:05, <h.shirosaki@gmail.com> wrote:
> >
$B$"$l!"$3$l$O(BWindows$B$G$O8_49@-$N$?$a$K$o$6$H>o$K(Blocale$B$G(Bexpand_path$B$5$l$k$h$&$K$7$F$*$$$?$h$&$J5-21$,$"$k$N$G$9$,!#(B
> >
>
1.9.3$B$N(Bunix$B$G$O>o$K(Blocale$B$K$J$k$h$&$K=$@5$5$l$F$$$^$7$?$,!"(Bwindows$B$G$O(Bbackport$B$9$k$H$-$K$O!"$=$N$^$^(B(2.0.0$B$HF1$8(B)$B$G<j$OF~$l$i$l$F$$$J$$$N$G$O$J$$$G$7$g$&$+!#(B
$B0U?^$r<($9%F%9%H$,$J$$$;$$$G5$IU$+$J$+$C$?$N$G$9$+$M$(!#(B
$B$"$H$GK\Ev$K%F%9%H$,$J$+$C$?$N$+$I$&$+C5$=$&!#(B
> encoding$B$r>o$K(Bfile system
encoding$B$K$9$k$N$O!"$?$V$s0J2<$N9T0J9_$N(Bcp$B$H(Bpath_encoding$B$r(Bfile system
encoding$B$K$9$l$P$h$$$H;W$$$^$9!#(B
> https://github.com/ruby/ruby/blob/trunk/win32/file.c#L584
$B$"$j$,$H$&$4$6$$$^$9!#(B
> >
$B$=$m$=$m$3$N;EMM$rJQ$($k$N$O%"%j$@$H$O;W$$$^$9$,!"(B1.9.3$B$O$A$g$C$H0U?^E*$G$O$J$$$N$G85$N5sF0$KLa$7$?$$$G$9!#(B
> > 2.0.0$B$O(B... $B8=>uM%@h$J$N$+$J$"!#(B
>
> > C:\$B$F$9$H(B> ruby200p0 -v a.rb
> > ruby 2.0.0p0 (2013-02-24 revision 39474) [x64-mswin64_100]
> > ["C:/\u3066\u3059\u3068/a", #<Encoding:UTF-8>]
>
>
trunk$B$N(Bosx$B$G$NF0:n$+$i9M$($k$H!"$3$N(Bencoding$B$,(BWindows-31J$B$K$J$k$N$,$h$$$H;W$C$?$N$G$9$,!"8=>u$,$h$$$N$G$7$g$&$+(B?
$B0U?^$O$H$b$+$/5sF0$OJQ$o$C$A$c$C$F$k$N$G!"$"$($F%P%0$@$H8@$o(B
$B$:$K;EMM$@$H2!$7@Z$C$?J}$,>-Mh3Z$+$b!"$H$+!#(B
$B$^$"!"$"$s$^$j6/$$0U8+$O$J$$$N$G!"(B2.0.0$B%a%s%F%J$N6a1J$5$s$HAj(B
$BCL$G$9$+$M$(!#(B
$B$=$l$G$O!#(B
on 2013-03-03 14:52
Issue #7881 has been updated by nagachika (Tomoyuki Chikanaga). 素朴にバグかと思っていたのですが、File.expand_path の今現在の挙動のほうが望ましい場面っていうのは考えられるんでしょうか。 ---------------------------------------- Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する https://bugs.ruby-lang.org/issues/7881#change-37274 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
on 2013-03-05 06:55
Issue #7881 has been updated by h.shirosaki (Hiroshi Shirosaki).
=begin
たとえば、下記のようなコードを書いたときに、current directoryのパスが日本語を含んでいても
Encoding::CompatibilityError にならずに動く、という利点はあるのではないでしょうか。
expand_pathの結果がfilesystem
encodingに変わる可能性があれば、日本語の引数に.encode('filesystem')をつけるなどしておかないといけません。
# coding: euc-jp
expand = File.expand_path('あ')
p [expand, expand.encoding]
path = File.join(expand, "あああ")
p [path, path.encoding]
あと、報告のあったrequire "./b" に関しては require_relative "b" でも動作するようです。
=end
----------------------------------------
Bug #7881: Windows でパスに日本語を含むスクリプトからの require が失敗する
https://bugs.ruby-lang.org/issues/7881#change-37295
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
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.