みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

なぜ2バイトのファイルが扱えないのでしょうか?

以前にも伺ったことですが、
なぜhttp(https)アクセスで2バイトのファイル名が扱えないのでしょうか?

私が調査したところ、
「WindowsとLinux(UNIXも含む)は文字コードが違うから」ということでした。
なので、テストとして自分のPC(WindowsXP Pro)にApacheとFTPソフトを入れ、
日本語のファイル名をUPLOADしhttpでアクセスしましたら、
きちんと認識(ブラウザで閲覧可能)できました。

しかし、世の中のWebサーバは(Linux)UNIXだけではなくWindowsで作られているものもあります。
ならば、なぜ2バイトのファイルが使えないのでしょうか?

投稿日時 - 2005-07-06 13:57:27

QNo.1495466

困ってます

質問者が選んだベストアンサー

特定の条件がそろえば、2バイト文字のファイル名でも扱うことができます。例えば、サーバのディスクに保存されているファイル名の漢字コードが、ブラウザで使っている漢字コードと一致すれば、2バイト文字のファイル名でも使うことができます。

自分だけが使うサーバだとか、友人同士で使うサーバなら、そのような制限があっても大丈夫かもしれませんが、世界中の誰もがアクセスできなければならないサーバだとすると、誰もがその特定の条件を揃えるのは不可能だといえると思います。

susumufire さんがテストされたのは、サーバ上にSJISのファイル名でファイルを作り、それをWindowsからSJISのファイル名で読み出そうとしたからですね。

この両者が食い違うとファイルにアクセスすることができません。

2バイトのファイル名が使えないという話は、必ず使えないのではなく、使えない場合がある、裏返せば、2バイトのファイル名はどんな場合でも使えるわけではない、→これが「2バイトのファイル名は使わないほうが良い」という話になっているのではないでしょうか。

投稿日時 - 2005-07-06 17:41:02

お礼

ご回答ありがとうございます。
先に回答された皆さんの言うとおり、
クライアントとサーバが一致している、
クライアントとサーバの文字コードが一致している
など条件がそろわない限り無理なんですね・・・

また、世界的なルールとしても2バイトの文字列は使わないほうがよろしいんですね。

ありがとうございました。

投稿日時 - 2005-07-07 08:56:59

ANo.5

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

HTTPプロトコルの中にファイル名の文字コードをセットするような仕様がないからだと思います。

フォームの内容を送信する場合でさえ、UTF-8で送信する場合もあれば、送信画面の文字コード使用する場合もあります。

ただし、クライアントとサーバのOSが同じであれば、クライアントもサーバも文字コードを自分にとって有利なように解釈するので、たまたまうまくいくだけだと思います。

投稿日時 - 2005-07-06 16:27:04

お礼

ご回答ありがとうございます。
クライアントとOSが同じ・・・
やはり私が実験したのも、(クライアント)Windows:Windows(サーバ)
でしたので、たまたまうまくいっていただけなんですね・・・

ありがとうございました。

投稿日時 - 2005-07-07 08:55:00

ANo.3

絶対に使えないというのではなく、特定の条件では使えます。これはすでにsusumufireさんが実験してその結果を得ているので明らかでしょう。

それでなぜ使えないというようなことが言われているのかというと、それは特定の組み合わせでしか正しく動作しないからです。全てのサーバーがWindowsとも限りませんし、全てのクライアントがWindowsとも限りません。またブラウザによっては文字コードをわざと(意図的に?)変更して送信するかもしれません。
Webの世界は誰からでもアクセスが出来るようにというのが前提にあると思います。それを守るためのルールですね。

投稿日時 - 2005-07-06 16:03:48

お礼

ご回答ありがとうございます。
すべての人が見られるようにするということは、
必然的(?)に1バイトのファイル名しか扱えないということですね。

了解しました。
ありがとうございます。

投稿日時 - 2005-07-07 08:52:53

ANo.2

>なぜhttp(https)アクセスで2バイトのファイル名が扱えないのでしょうか?
→そのサーバが処理できない(1バイト文字しか想定していない)からだと思います。

>なぜ2バイトのファイルが使えないのでしょうか?
→アクセス時の文字列ではなく、ファイル名の話しですか?それともファイルの中に記述される文字列の話しですか?
 どちらにしても、それを処理するOS/ソフトが1バイトしか想定していない場合、文字化けするか扱えない場合があるようです。

投稿日時 - 2005-07-06 14:17:53

お礼

ご回答ありがとうございます。
ということは、サーバが2バイトの文字列を処理できるのか、
調査してみる必要があるみたいですね。

確認してみます。
ありがとうございました。

投稿日時 - 2005-07-07 08:51:07

ANo.1

何もアクセスしてくるのは日本語対応のPCとは限りませんから、そこら辺が問題となるのではないでしょうか?

お互いに見る人も作る人も日本語ファイル名を使っていいという条件で見るのであれば問題ないですが、すべての人が対応できているわけではなりません。

確かに最近のOSでは2バイト文字を使う使わないにかかわらず対応できているものもありますが、昔の1バイト文字までしか対応できないものもまだ多く存在します。
2バイト文字を2バイトで1文字と認識できないマシンは、そのコードによって制御コードなどと勘違いすることもあり正しく表示できないことが多くあります。

使おうと思えば使えますが、誰かは見れない可能性があるという意味で「使えない」という表現を使っていると思われます。

投稿日時 - 2005-07-06 14:17:45

お礼

ご回答ありがとうございます。
「絶対に使えない」のではなく「見ることができない可能性があるから使えない」としているだけなんですね・・・
ありがとうございました。

投稿日時 - 2005-07-07 08:49:36

あなたにオススメの質問