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

In message "[ruby-dev:46375] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX"
    on Nov.03,2012 04:56:59, <kosaki.motohiro / gmail.com> wrote:
> 1)
> ロケールは UTF-8
> ファイルシステムはFAT(よってファイルシステムのファイル名はShiftJIS or another country specific codepage)
> ファイルの中身は EUC
> 
> ※これはSDカードなどで実際に発生しうる

これ、私も気になってるんですが、苦情を見かけないのが不思議で
す。
みなさんどうしてるんでしょう?

ただ、よくわかんないんですが、最近はSDカードとかFATつっても
FAT32じゃないんすかね。
であればUnicodeなファイルエントリもあるはずなのでファイルシス
テムドライバが真面目に作ってあればUTF-8でファイル名アクセスが
できて問題ないようにも思います。
この辺はそういうシステムを使ってる人に聞きたいところ。


> 2)  ロケールは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 <usa / garbagecollect.jp>