Project

General

Profile

Actions

Bug #2154

closed

filesystem encoding of UNIX

Added by usa (Usaku NAKAMURA) about 16 years ago. Updated almost 8 years ago.

Status:
Rejected
Target version:
ruby -v:
ruby 2.0.0dev (2012-10-25 trunk 37328)
[ruby-dev:39393]

Description

=begin
「Ruby M17N の蚭蚈ず実装」によるず(*1)、UNIXにおけるfilesystem
encodingはlocaleであるず曞かれおいるのですが、実際には珟圚の
実装はdefault externalになっおいたす。
実装の方が間違っおる気がするのですが、どうでしょうか?

*1 http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l23
=end


Related issues 3 (0 open — 3 closed)

Related to Ruby - Bug #7267: Dir.glob on Mac OS X returns unexpected string encodings for unicode file namesClosedduerst (Martin DÃŒrst)11/02/2012Actions
Related to Ruby - Feature #7280: How to set filesystem encodingClosednaruse (Yui NARUSE)Actions
Related to Ruby - Bug #5919: File singleton methods (expand_path, realpath, dirname, basename, extname) should respect encodingsClosednaruse (Yui NARUSE)01/21/2012Actions
Actions #1

Updated by naruse (Yui NARUSE) about 16 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r25140.
=end

Updated by usa (Usaku NAKAMURA) almost 13 years ago

  • Description updated (diff)
  • Status changed from Closed to Assigned
  • Assignee changed from naruse (Yui NARUSE) to akr (Akira Tanaka)
  • ruby -v changed from ruby 1.9.2dev (2009-09-28 trunk 25132) [i386-mswin32] to ruby 2.0.0dev (2012-10-25 trunk 37328)

ず、いうこずだったのですが、r25782においお意図的にdefault externalに戻されおいたす。
理由を発芋できなかったのですが、なぜでしょう

Updated by akr (Akira Tanaka) almost 13 years ago

2012幎10月29日 10:31 usa (Usaku NAKAMURA) :

ず、いうこずだったのですが、r25782においお意図的にdefault externalに戻されおいたす。
理由を発芋できなかったのですが、なぜでしょう

その時点の蚘憶はすでにないのですが、おそらく、
locale ず異なる encoding でパス名を扱いたい堎合に、
蚭定できるようにするためではないかず思いたす。

ずくに指定しなければ、default external は locale から蚭定されるので、
「UNIXにおけるfilesystem encodingはlocaleである」ずいうのはそれほど
倉ではないのではないでしょうか。¶

[田侭 哲][たなか あきら][Tanaka Akira]

Updated by usa (Usaku NAKAMURA) almost 13 years ago

こんにちは、なかむら(う)です。

In message "[ruby-dev:46310] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX"
on Oct.29,2012 10:57:06, wrote:

その時点の蚘憶はすでにないのですが、おそらく、
locale ず異なる encoding でパス名を扱いたい堎合に、
蚭定できるようにするためではないかず思いたす。

ずくに指定しなければ、default external は locale から蚭定されるので、
「UNIXにおけるfilesystem encodingはlocaleである」ずいうのはそれほど
倉ではないのではないでしょうか。

ふむ。
ずするず、本圓は、filesystem encodingを明瀺しお蚭定するAPIが
合ったほうがいいんでしょうかね。
2.0.0にも間に合わなわなさそうなので今は深入りを避けたすが。

さお、ここで問題なのですが、localeがUTF-8だずしお、

p File.expand_path("a").encoding # A
Encoding.default_external = Encoding::EUC_JP
p File.expand_path("a").encoding # B
p File.expand_path("a".encode(Encoding::SHIFT_JIS)).encoding # C

ずしたずき、A, B, Cはそれぞれどうなるべきでしょう?

filesystem encoding(=default_external)を尊重するなら、

A: UTF-8
B: EUC-JP
C: EUC-JP

になるはずで、1.9.3-p286は実際そうなりたす。
䞀方で、実は珟圚のtrunkは匕数のencodingを尊重しおおり、

A: US-ASCII (script encodingがそうなので)
B: US-ASCII
C: Shift_JIS

になりたす。

この蟺色々悶々ずしおいおるのですが、珟時点での私の考えずしお
は、

  • ファむルシステムのencodingが原則ずしお固定であるプラット
    フォヌム(぀たり䟋えばWindows)では、内郚倉換を行い、匕数の
    encodingで結果を返す。

  • ファむルシステムのencodingが個々の利甚者にゆだねられおい
    お、システム的にはバむト列ずしお扱われおいるプラットフォ
    ヌム(぀たり普通のUnix)では、内郚では単にバむト列ずしお扱
    い、default_externalにforce_encodingしお結果を返す。

ずするのがよいのかなあ、ず思っおいたす。
プラットフォヌムによっお挙動が違うのがやや残念ですが、結局こ
れが既存のスクリプトに最も圱響を䞎えない方法なのかなあ、ず...

皆さんどう思われたすか。

それでは。¶

U.Nakamura

Updated by kosaki (Motohiro KOSAKI) almost 13 years ago

ずくに指定しなければ、default external は locale から蚭定されるので、
「UNIXにおけるfilesystem encodingはlocaleである」ずいうのはそれほど
倉ではないのではないでしょうか。

ふむ。
ずするず、本圓は、filesystem encodingを明瀺しお蚭定するAPIが
合ったほうがいいんでしょうかね。
2.0.0にも間に合わなわなさそうなので今は深入りを避けたすが。

めんどくさいケヌスは以䞋の぀ですかね。

ロケヌルは UTF-8
ファむルシステムはFATよっおファむルシステムのファむル名はShiftJIS or another country specific codepage)
ファむルの䞭身は EUC

※これはSDカヌドなどで実際に発生しうる

  1. ロケヌルはUTF-8だけどファむルシステム゚ンコヌディングはUTF8MACな某OS

ずいうパタヌンだず思うので、これをケアする必芁があるならAPIが必芁そうに思えたす。芁望を䞊がっおこない所をみるずあんたり困っおないのかな

たずたっおないので思い぀いたこずを箇条曞きで曞くず

・Linuxではlocale(UTF-8)、MacではUTF8MAC、WindowsではUTF-16だっけがデフォルトのファむルシステム゚ンコヌディングであっお欲しい
・SDカヌド察策のために違う゚ンコヌディングを指定できお欲しい。これはdefault_externalをかえるよりかは匕数で䞎えれたほうが䟿利そうな気がする。
default_externalを倉えちゃうず別のスレッドがぎゃっずいいそうだから
・default_filesystem_encondingみたいなのがあれば、昔のLinuxのむメヌゞに残っおいるEUC-JPなデヌタをサルベヌゞするずきに䟿利そうである
・2.0ではデフォルトはlocaleにしおおいたほうが、あずから自然に拡匵できるような気がする

以䞊です。もうちょっず考えおからたたなんか曞くかも

Updated by shyouhei (Shyouhei Urabe) almost 13 years ago

On 11/02/2012 01:56 PM, KOSAKI Motohiro wrote:

ずくに指定しなければ、default external は locale から蚭定されるので、
「UNIXにおけるfilesystem encodingはlocaleである」ずいうのはそれほど
倉ではないのではないでしょうか。

ふむ。
ずするず、本圓は、filesystem encodingを明瀺しお蚭定するAPIが
合ったほうがいいんでしょうかね。
2.0.0にも間に合わなわなさそうなので今は深入りを避けたすが。

めんどくさいケヌスは以䞋の぀ですかね。

ロケヌルは UTF-8
ファむルシステムはFATよっおファむルシステムのファむル名はShiftJIS or another country specific codepage)
ファむルの䞭身は EUC

※これはSDカヌドなどで実際に発生しうる

  1. ロケヌルはUTF-8だけどファむルシステム゚ンコヌディングはUTF8MACな某OS

ずいうパタヌンだず思うので、これをケアする必芁があるならAPIが必芁そうに思えたす。芁望を䞊がっおこない所をみるずあんたり困っおないのかな

埌者に関しおはリク゚ストが来おたすね([ruby-core:48745] [Bug #7267])、吊定的な返答しちゃったけど。

Updated by kosaki (Motohiro KOSAKI) almost 13 years ago

  1. ロケヌルはUTF-8だけどファむルシステム゚ンコヌディングはUTF8MACな某OS

ずいうパタヌンだず思うので、これをケアする必芁があるならAPIが必芁そうに思えたす。芁望を䞊がっおこない所をみるずあんたり困っおないのかな

埌者に関しおはリク゚ストが来おたすね([ruby-core:48745] [Bug #7267])、吊定的な返答しちゃったけど。

たったく技術的じゃない感芚論でいうず、Macナヌザロケヌルやdefault_external を
UTF-8MACにするこずはありえないず思うので、気持ち的にはなんらかのケアをしおあげたいなあずか思うんですよね。
自分はMacで日本語ファむル名を䞀切぀かっおないのでなかなか手が動かないけど

Updated by usa (Usaku NAKAMURA) almost 13 years ago

こんにちは、なかむら(う)です。

In message "[ruby-dev:46375] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX"
on Nov.03,2012 04:56:59, wrote:

ロケヌルは UTF-8
ファむルシステムはFATよっおファむルシステムのファむル名はShiftJIS or another country specific codepage)
ファむルの䞭身は EUC

※これはSDカヌドなどで実際に発生しうる

これ、私も気になっおるんですが、苊情を芋かけないのが䞍思議で
す。
みなさんどうしおるんでしょう?

ただ、よくわかんないんですが、最近はSDカヌドずかFAT぀っおも
FAT32じゃないんすかね。
であればUnicodeなファむル゚ントリもあるはずなのでファむルシス
テムドラむバが真面目に䜜っおあればUTF-8でファむル名アクセスが
できお問題ないようにも思いたす。
この蟺はそういうシステムを䜿っおる人に聞きたいずころ。

  1. ロケヌルはUTF-8だけどファむルシステム゚ンコヌディングはUTF8MACな某OS

ずいうパタヌンだず思うので、これをケアする必芁があるならAPIが必芁そうに思えたす。芁望を䞊がっおこない所をみるずあんたり困っおないのかな

困っおる話は卜郚さんも玹介されたようにけっこうな頻床で芋かけ
るように思いたす。
ここは成瀬さんが深く考えおいたはずなので説明お願いしたす。

たずたっおないので思い぀いたこずを箇条曞きで曞くず

・Linuxではlocale(UTF-8)、MacではUTF8MAC、WindowsではUTF-16だっけがデフォルトのファむルシステム゚ンコヌディングであっお欲しい

Windowsではいわゆる「W」は内郚的にUTF-8に倉換しお扱うこずにし
たので、next majorあたりでファむルシステム゚ンコヌディングは
UTF-8にしたす。

スクリプトはUTF-16を返されおもASCII compatibleじゃないので¶

制限がき぀くお䜿えないし、ruby内郚でもASCII compatibleじゃ¶

ない文字列をパス名ずしお扱えるようにはほずんどなっおない。¶

・SDカヌド察策のために違う゚ンコヌディングを指定できお欲しい。これはdefault_externalをかえるよりかは匕数で䞎えれたほうが䟿利そうな気がする。
default_externalを倉えちゃうず別のスレッドがぎゃっずいいそうだから
・default_filesystem_encondingみたいなのがあれば、昔のLinuxのむメヌゞに残っおいるEUC-JPなデヌタをサルベヌゞするずきに䟿利そうである

これは先に曞いたずおり私も同意したす。

・2.0ではデフォルトはlocaleにしおおいたほうが、あずから自然に拡匵できるような気がする

default_externalじゃなくお、ずいうこずでしょうか?

実はbackportの郜合で今時点の1.9.3 HEADも珟状のtrunkの実装を匕
き継いでいるので、個人的には、たずさっさず2.0.0でどうするか、
を決めおしたいたい気分です。1.9.3はそれに合わせるので。

ずころで、しろさきさんっおこっち芋おたす?
芋おたらいろいろ教えお欲しいずころ。

それでは。¶

U.Nakamura

Updated by h.shirosaki (Hiroshi Shirosaki) almost 13 years ago

2012/11/5 U.Nakamura :

実はbackportの郜合で今時点の1.9.3 HEADも珟状のtrunkの実装を匕
き継いでいるので、個人的には、たずさっさず2.0.0でどうするか、
を決めおしたいたい気分です。1.9.3はそれに合わせるので。

expand_pathのencodingが匕数のencodingず同じになるのは、コヌドを曞くずきには、それはそれで分かりやすいずは思いたす。encodingが自動的に倉わらないずいうこずなので。

パス名にマルチバむトを䜿うず、トラブルの元になりたすから、私は䜿わないようにしおいたす。

--
Hiroshi Shirosaki

Updated by h.shirosaki (Hiroshi Shirosaki) almost 13 years ago

2012/11/5 U.Nakamura :

ただUNIX系に぀いおは特に意図せず倉曎されおいるず思うので、珟
時点では挙動を戻すのが劥圓なラむンかず思っおいるのですが...
なおこの倉曎は䟋のWindows甚のFile.expand_path高速化の副䜜甚で
あるずいうのが私の芳枬なので、それが事実かどうか(そしお事実だ
ずしたらどこを盎せばいいのか)をちょっず考えおみおほしいです。

File.expand_pathのencodingが倉わったのは、䞭田さんの修正による倉曎のように思いたす。
私は意図的に仕様を倉曎したのだず思っおいたした。
Windows甚のFile.expand_pathは、その倉曎にあわせおありたす。

--
Hiroshi Shirosaki

Updated by usa (Usaku NAKAMURA) almost 13 years ago

こんにちは、なかむら(う)です。

In message "[ruby-dev:46403] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX"
on Nov.05,2012 21:33:52, wrote:

File.expand_pathのencodingが倉わったのは、䞭田さんの修正による倉曎のように思いたす。

なんですずヌ。
どうなんですかなかださん

私は意図的に仕様を倉曎したのだず思っおいたした。
Windows甚のFile.expand_pathは、その倉曎にあわせおありたす。

Windowsに぀いおは以前から私にはそういう意志があるのでいいんで
すが。
どっかでごっちゃになっおるのかな。

それでは。¶

U.Nakamura

Updated by kosaki (Motohiro KOSAKI) almost 13 years ago

・2.0ではデフォルトはlocaleにしおおいたほうが、あずから自然に拡匵できるような気がする

default_externalじゃなくお、ずいうこずでしょうか?

default_external
ずいう仕様にしおしたうず、default_file_systemを䜜った時に互換性のため最終仕様が以䞋のようになっおしたうので、わかりにくいかなあずか思っおたした

以䞋の順に圱響

  1. expand_path()の匕数゚ンコヌディング
  2. default_file_system
  3. defaut_external
  4. locale

深い理由ではないので無芖しおもらっおも

Updated by naruse (Yui NARUSE) almost 13 years ago

usa (Usaku NAKAMURA) wrote:

In message "[ruby-dev:46375] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX"
on Nov.03,2012 04:56:59, wrote:

ロケヌルは UTF-8
ファむルシステムはFATよっおファむルシステムのファむル名はShiftJIS or another country specific codepage)
ファむルの䞭身は EUC

※これはSDカヌドなどで実際に発生しうる

これ、私も気になっおるんですが、苊情を芋かけないのが䞍思議で
す。
みなさんどうしおるんでしょう?

ただ、よくわかんないんですが、最近はSDカヌドずかFAT぀っおも
FAT32じゃないんすかね。
であればUnicodeなファむル゚ントリもあるはずなのでファむルシス
テムドラむバが真面目に䜜っおあればUTF-8でファむル名アクセスが
できお問題ないようにも思いたす。
この蟺はそういうシステムを䜿っおる人に聞きたいずころ。

珟状では default_external を SJIS にしおファむル開くずきに external encoding を EUC-JP に蚭定ずかですかねぇ。

  1. ロケヌルはUTF-8だけどファむルシステム゚ンコヌディングはUTF8MACな某OS

ずいうパタヌンだず思うので、これをケアする必芁があるならAPIが必芁そうに思えたす。芁望を䞊がっおこない所をみるずあんたり困っおないのかな

困っおる話は卜郚さんも玹介されたようにけっこうな頻床で芋かけ
るように思いたす。
ここは成瀬さんが深く考えおいたはずなので説明お願いしたす。

filesystem encoding を UTF8-MAC にするず、non ASCII が入った瞬間 UTF-8 の文字列ず比范できなくなっお困り、
UTF-8 にするず UTF-8 なのに decomposed なので困るずいう八方ふさがりな状態であるずいう、
圓たり前の知芋が埗られたした。

Updated by mame (Yusuke Endoh) over 12 years ago

  • Target version changed from 2.0.0 to 2.6

Updated by mame (Yusuke Endoh) almost 8 years ago

  • Assignee changed from akr (Akira Tanaka) to naruse (Yui NARUSE)

なんずなく成瀬さんに振り盎しおみたす。このチケット、いかが思われたすか。

Updated by naruse (Yui NARUSE) almost 8 years ago

  • Status changed from Assigned to Rejected

特に芁望は来おいないように思うのでrejectで。

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0