Bug 3383 パスにShift_JISで0x7Cを含むファイルからFirefoxを起動できない
初回投稿日時: 2005年07月23日05時07分56秒
最終更新日時: 2005年07月23日05時14分04秒
カテゴリ: Firefox Mozilla Core
SNS:
Tweet (list)
ようやく色々と判明。
まずは原因。0x7Cは'|'(pipe)だが、これは本来、URLエンコードする場合にエスケープされるべきものである。しかし、昔のNetscapeブラウザで'|'を':'の代わりに使っていたという歴史があるので、互換性をとるために'|'はファイルパスではエスケープしないようになっている。これは元々、各種ファイルシステムで'|'がパス名に使えないことから問題が無かったことだ。つまり、ローカルファイルをURLエンコードする際に、0x7Cが"%7C"になることはなかった訳だ。
しかし、Firefoxはとても都合の悪いことに、複数のページをホームページに指定する際のURLの区切り文字に'|'を使ってしまった。このため、URLエンコードでエスケープされなかった0x7CでURLが区切られてしまい、ファイルパスが正常に伝わらなくなってしまっている。
解決方法は三種類。そのうち二種類は既に進行中だった。
まず、一つ目の解決方法は、'|'をURLの区切り文字として使わないようにするというもの。これは代わりにスペースを用いるパッチが提案されているが、一向に進展しない。英語圏では大した問題ではないため、このままでは見送りの可能性も出てきた。
二つめの解決方法は、Unicodeパスを利用できるようにするために、ファイルパスのURL化の際にUTF-8でエンコードしようというものだ。パッチも提出されている。しかし、これはとても大きな仕様変更なので、私には1.8のブランチ後にはチェックイン不可能なのではないかと思える。
最後に、今日、提案した解決方法は、非ASCII文字の直後にきた0x7Cはエスケープしてしまう、というものだ。常に0x7Cをエスケープしてしまうと、file:///C|/foo/bar.txt
という入力でファイルが開けなくなる副作用を確認したので、非ASCII文字の直後に限定したのだ。これならば問題はないが、'|'がパスとして使われない文字なので、ISO-8859-Xでも問題が無いという綱渡りな仕様ではある。(もっとも、ドライブレターの直後の'|'以外はエスケープされても問題ないのだが、それ以外の部分でエスケープされたり、されなかったりすると気持ち悪いだろう。)