Forum: Ruby-dev [ruby-trunk - Feature #8657][Open] Make Find.find respect the encodings of arguments

303dd57f37d64288bb4f0336332a8882?d=identicon&s=25 ktsj (Kazuki Tsujimoto) (Guest)
on 2013-07-19 12:53
(Received via mailing list)
Issue #8657 has been reported by ktsj (Kazuki Tsujimoto).

----------------------------------------
Feature #8657: Make Find.find respect the encodings of arguments
https://bugs.ruby-lang.org/issues/8657

Author: ktsj (Kazuki Tsujimoto)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version: next minor


=begin
== 概要
Find.findが返すパス名は常にfilesystem encodingとなっていますが
任意のencodingを指定できるようにすることを提案します。

== ユースケース
日本語Windowsではfilesystem encodingはWindows-31Jとなっています。

このため、Windows-31Jに存在しない文字を含むファイル名があった場合に
正しいパス名を取得できないという問題が起きます。

 D:\>dir /s /b D:\t
 D:\t\♠ (U+2660)
 D:\t\♠\a.txt

 D:\>ruby -v -rfind -e "p
Find.find('D:/t'.force_encoding('utf-8')).to_a"
 ruby 2.1.0dev (2013-07-19 trunk 42058) [i386-mingw32]
 ["D:/t", "D:/t/?"]

== API
パス名を扱う他のAPIにおけるencoding指定の方式には以下の2つがあるようです。
([ruby-list:44877]にこの辺りの議論がありますが結論が見あたりませんでした)

* encodingオプションを明示的に渡す(e.g. Dir.entries)、
* 引数として与えた文字列のencodingを暗黙的に利用する(e.g. Dir.glob)

ファイルシステムごとにencodingが別々である可能性を考慮しなければならないこと(#2154)、
Find.findは引数として複数のパスをまとめて受け取れることから
後者の形にするのがよさそうに思います。

== 実装
lib/find.rbに対するパッチを添付します。
=end
303dd57f37d64288bb4f0336332a8882?d=identicon&s=25 ktsj (Kazuki Tsujimoto) (Guest)
on 2013-08-31 08:13
(Received via mailing list)
Issue #8657 has been updated by ktsj (Kazuki Tsujimoto).


現在findのメンテナがいないようなのであわせて立候補します。
----------------------------------------
Feature #8657: Make Find.find respect the encodings of arguments
https://bugs.ruby-lang.org/issues/8657#change-41472

Author: ktsj (Kazuki Tsujimoto)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version: next minor


=begin
== 概要
Find.findが返すパス名は常にfilesystem encodingとなっていますが
任意のencodingを指定できるようにすることを提案します。

== ユースケース
日本語Windowsではfilesystem encodingはWindows-31Jとなっています。

このため、Windows-31Jに存在しない文字を含むファイル名があった場合に
正しいパス名を取得できないという問題が起きます。

 D:\>dir /s /b D:\t
 D:\t\♠ (U+2660)
 D:\t\♠\a.txt

 D:\>ruby -v -rfind -e "p
Find.find('D:/t'.force_encoding('utf-8')).to_a"
 ruby 2.1.0dev (2013-07-19 trunk 42058) [i386-mingw32]
 ["D:/t", "D:/t/?"]

== API
パス名を扱う他のAPIにおけるencoding指定の方式には以下の2つがあるようです。
([ruby-list:44877]にこの辺りの議論がありますが結論が見あたりませんでした)

* encodingオプションを明示的に渡す(e.g. Dir.entries)、
* 引数として与えた文字列のencodingを暗黙的に利用する(e.g. Dir.glob)

ファイルシステムごとにencodingが別々である可能性を考慮しなければならないこと(#2154)、
Find.findは引数として複数のパスをまとめて受け取れることから
後者の形にするのがよさそうに思います。

== 実装
lib/find.rbに対するパッチを添付します。
=end
303dd57f37d64288bb4f0336332a8882?d=identicon&s=25 ktsj (Kazuki Tsujimoto) (Guest)
on 2013-09-07 06:39
(Received via mailing list)
Issue #8657 has been updated by ktsj (Kazuki Tsujimoto).


=begin
[[ruby:DevelopersMeeting20130831Japan]]でacceptされたのでコミットしました。
=end

----------------------------------------
Feature #8657: Make Find.find respect the encodings of arguments
https://bugs.ruby-lang.org/issues/8657#change-41660

Author: ktsj (Kazuki Tsujimoto)
Status: Closed
Priority: Normal
Assignee:
Category: lib
Target version: next minor


=begin
== 概要
Find.findが返すパス名は常にfilesystem encodingとなっていますが
任意のencodingを指定できるようにすることを提案します。

== ユースケース
日本語Windowsではfilesystem encodingはWindows-31Jとなっています。

このため、Windows-31Jに存在しない文字を含むファイル名があった場合に
正しいパス名を取得できないという問題が起きます。

 D:\>dir /s /b D:\t
 D:\t\♠ (U+2660)
 D:\t\♠\a.txt

 D:\>ruby -v -rfind -e "p
Find.find('D:/t'.force_encoding('utf-8')).to_a"
 ruby 2.1.0dev (2013-07-19 trunk 42058) [i386-mingw32]
 ["D:/t", "D:/t/?"]

== API
パス名を扱う他のAPIにおけるencoding指定の方式には以下の2つがあるようです。
([ruby-list:44877]にこの辺りの議論がありますが結論が見あたりませんでした)

* encodingオプションを明示的に渡す(e.g. Dir.entries)、
* 引数として与えた文字列のencodingを暗黙的に利用する(e.g. Dir.glob)

ファイルシステムごとにencodingが別々である可能性を考慮しなければならないこと(#2154)、
Find.findは引数として複数のパスをまとめて受け取れることから
後者の形にするのがよさそうに思います。

== 実装
lib/find.rbに対するパッチを添付します。
=end
This topic is locked and can not be replied to.