• ベストアンサー

日本語のファイル名は使いたくない。

いつもお世話になっております。 表題の通り、 WEBサイトを構成する際に、ファイルのアップロードとダウンロード機能を実装しようとしています。 しかしファイル名に日本語を使うと、問題が色々と出てきて推奨されていない事は想像に難しくありません。 その裏づけを取るために色々とググったのですが、 「日本語ファイル名を使わないほうがいい」というサイトの殆どが見解どまりであり、 公式な(例えばW3Cなど)機関が発行しているサイトを見つける事ができませんでした。 ご存知でしたらご示唆いただけませんでしょうか。 どこそこ機関のhtml仕様やwebサイト構築の国際水準等で ファイル名に日本語を使う事は推奨しない! みたいな事が書かれていればすごく嬉しいです。 もしくは、UTF-8で構成されているWEBサイトにおいて、 ファイルダウンロード時だけは日本語ファイル名に対応する為に(IE6用とか)htmlヘッダをshift-jisで偽装する方法・・・を否定するような記事とか、 そもそもwebサイトにshift-jisを使うのはこれからナンセンスだよ。 みたいな公式な記事があれば幸いです。 お手数ですが、 宜しくお願い致します。 経緯をご説明しますと。 客が分かってくれない(笑)

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
回答No.4

ファイル名に日本語は使えますよ。 ある工夫が必要ですけどね。 使ってはいけないとあるのはRFCのとおりURL(など)のことで、ファイル名のことではありません。 つまり、ファイル名に一致するようにURLを作れば、自由に日本語名のファイルを作れます。 で、その工夫ですけど、 (1) まずファイル名に日本語を指定できること。 日本語ファイル名に対応したOSを用意して下さい。 (2) 次にそのファイル名とURLを一致させる作業をする。 URLの規定で日本語は扱えませんから、文字コードを%00などの書き方に変換(URLエンコード)する必要があります。 そのエンコードの時に、Windowsではファイル名の文字コードがShift_JISですので、Shift_JISで%00に変換し、LinuxやFreeBSDではEUC-JPですからEUC-JPで変換します。 MacOS Xは不明。Shift_JIS、UTF-8、EUCのいずれかだと思いますが、Apache、HTTP経由でアクセスできませんでした。 環境依存ですので、OSの設定を変えていればこれら以外の文字コードになります。 (3) そのエンコードした物を<a href="">に指定すると、日本語名のファイルにアクセスできるようになります。 このURLエンコードをブラウザに任せると、 <a href="日本語.txt"> などと簡単に書けますが、 HTMLファイルがUTF-8ならUTF-8で%00形式に変換したりして、ファイルにアクセスできなくなることがあります。 (URLエンコードするときの文字コードと、ファイル名の文字コードが一致しない) また、アドレス欄に日本語のまま入力しても同様にアクセスできなくなることがあります。 文字コードに関して理解していないと作れない、作業が面倒という理由で、「しない方が良い」と言われているだけです。 ユーザビリティー・アクセシビリティーとしては、「ユーザーが読みやすいと思えば、制作に対して労力は惜しんではいけない」が基本ですから、 たとえばファイル名に単語を並べる「about-html-making.html」という作り方があります。 URLをみれば、その内容が推測できるという方法です。 同様に、日本人向けには日本語のファイル名を推奨するところですが、 上記(1)の理由で国際化を考えると無理がありますので、 「その国の人に対してのユーザビリティー」か、「国際的なユーザビリティー」かを選ぶなら、 やっぱり国際的な方が推奨されると思います。 > そもそもwebサイトにshift-jisを使うのはこれからナンセンスだよ。 ウェブページはすでにShift_JISはナンセンスになっています。 > 公式な(例えばW3Cなど)機関が発行しているサイトを見つける事ができませんでした。 たぶん、ないんじゃないでしょうか。 OSの問題はHTMLやHTTPの管轄からはずれていますしね。 > 経緯をご説明しますと。 > 客が分かってくれない(笑) ユーザビリティーというのは、基本的に利用者が絶対です。 「日本語のサーバーだし、日本人向けのページだから」と言われればそれまでです。 適当にごまかすしかないと思います。 日本語の作り方を教えなければ、「アクセスできなくなる」で通じるんじゃないでしょうか?

Unripe01
質問者

お礼

なので、(1)の対応をしようと思うのですが、 残念な事に .NET Framework では、構成ファイル globalization エントリ responseEncoding 属性の設定に関わらず、HTTP ヘッダを UTF-8 でエンコードして送信してしまうみたいです。 http://support.microsoft.com/kb/436616/ja つまり、無理やりダウンロードさせると、今度はIE上で日本語のファイル名が化ける。 という事で、 (1)Excel2000側での文字化け (2)IEの文字化け 2重で文字化けに悩んでいるのです。 S-JISをURIエンコードしたらいけるか?と思いましたが、 サーバー側でハイパーリンクを作る際に、 ファイル名をs-jisにエンコードした結果をURLエンコードしてもダメでした。(多分検討違い) 仕方がないので ASP.NET 2.0 から追加されたresponseHeaderEncoding 属性を使ってhttpヘッダをS-JISに指定し、ファイルをダウンロードさせる予定です。 以上、現在小生の見解と対応方針です。 もし、上記文面の中に何か見当違いの事があればご指摘いただければ幸甚です。 問題はまだ解決していない状態ですので、 まだ回答を受け付ける状態にしている事をご容赦ください。 最後になりましたが、小生の現状はPGという立場で、 「できない」理由付けが間に合わず SEさんが既に「対応可能」という事で進めてしまいました。 それゆえ、 >>日本語の作り方を教えなければ、「アクセスできなくなる」で通じるんじゃないでしょうか? ができなくなってしまった状態です(^^A) 解決後、必ずフィードバックを行います。 よろしくお願い致します。

Unripe01
質問者

補足

長くなったので補足とお礼で1まとめで回答させていただきます。 とても詳しいご説明とご指摘をいただきありがとうございます。 talooさんのご回答、今後WEBサイトの構築にてとても参考になりました。 フィードバックを兼ねて、 現状の開発環境についてご説明しておきます。 開発言語はVB.NET(ASP) Framework 2.0 での開発となっています。 既に稼動しているファイルのUP/DL機能については、ファイル名に制限を設けておらず、サーバー側のファイル名に対して、URLエンコードしたハイパーリンクを表示させてファイルへアクセス可能なようになっています。 .NETの機能で、HyperLinkクラスというものがあり、こいつにファイルの物理パス(未エンコード)を指定してやると、ブラウザ側にURL円コードされたリンクが作成される仕組みとなっています。 これが、 >>(2) 次にそのファイル名とURLを一致させる作業をする。 の事だと認識しています。 で、この度のご質問の発端はここから・・・ ある日、Excel2000で作成したファイルをアップロードした後、そのファイルへのハイパーリンクをクリックして(ブラウザで)開き、名前を付けて保存したらファイル名が化けたという相談が入りました。 (顧客環境では、Excelのリンクをクリックするとダウンロードダイアログは開かずにブラウザで開かれます。) 確信は持ってませんが、Excel2000はUTF-8の文字コードに対応していない為、URLエンコードされたファイル名(%00)をうまく認識できないのでは? と思ってます。ちなみに、Excel2003がインストールされているマシンでは上記現象は発生しません。 ここで考えられる対応は、 (1)Excelで開かせない(httpヘッダにoctet-streamを指定して無理やりブラウザのダウンロードダイアログを表示させる) (2)他が思い浮かばないです↓

その他の回答 (3)

noname#108428
noname#108428
回答No.3

HTML等の言語の仕様だけでなく、 Webサーバに搭載されたOSの ファイル管理の仕様も参照されると、 顧客への説明に適した切り口が 見るかるかもしれません。

Unripe01
質問者

お礼

アドバイスありがとうございます! ちなみに開発環境 .NET2.0 WEBサバはWindows2003 IIS5.2 R2 ですね。 基本的にはS-JIS管理で問題ないところがまた憎いところです。 IISの方についても、MSが 「globalization 要素に responseHeaderEncoding 属性が用意され、これにより HTTP ヘッダのエンコード方式を指定できるようになりました。」 なんて言ってるもんだから誤解を値かねない。 もうちょっと掘り下げて考えて見ます。 ありがとうございました!

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.2

ファイル名でファイルを保存する設計そのものに問題があります。 通常は保存したファイルを連番などで保存し、ダウンロードするときに日本語に変換します。 ファイル名は日本語に限らず、シングルクオートやダブルクオート、[]()が入る可能性もあるため、設計を見直すべきです。 頑張ってください。

Unripe01
質問者

お礼

ご指摘ありがとうございます。 当方、基本的な設計方針はファイルそのものをバイナリでDBに登録する方法を採用していました。 (そういえばASP.NETでファイルのダウンロード時に名称の変換を行うと、WEBサイトのファイル名が付いてしまう現象があったような・・・ちがったかな。) ちなみに弁解させていただくと、既に本番稼動しているシステムの改修です。 サーバー側にファイルが生で存在していて、ファイルパスへの参照をハイパーリンクで(URLパス)表示してダウンロードさせている仕様です。 一応動いているようなのですが、Excel2000やUTF-8に対応していないアプリが直接起動するような場合に、「名前を付けて保存」で文字化けが発生しています。 ダウンロード専用ボタン等を実装するか、ダウンロード専用ページをワンクッション挟んでハイパーリンクに表示させる(ファイル名はURLエンコードされるので日本語が含まれるダウンロードパスは別途考えるとして)と思いましたが、今度はIE6のUTF-8のファイル名文字化け問題が出てくる・・・ そうなるとヘッダ偽装しかないなと。。。 でもできることなら右クリックで保存したら解決じゃないか。。。それはだめなのね? って感じです。 ファイル名の問題については、開発者目線では重要なのですが、営業SE目線ではそうでもないようですね。 頑張ります!

Unripe01
質問者

補足

お礼の所に補足を書き込んでしまったのでこちらに。 一応・・・その既に稼動している設計は ファイルの置き場所:なまでサーバーに ファイルパスの保存場所:DBでhttp://~ ファイルパス  になっているので、つまるところハイパーリンクのアドレスさえ叩けば誰でもDL可能になっているという仕様です。 今後色んな課題が出てくると思います。 ご指摘、ご回答ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

rfc2396とか

Unripe01
質問者

お礼

アドバイスありがとうございます。 rfc・・初めてちゃんと見ようと思います。。。お恥ずかしい。 まだまだ未熟者ですが頑張ります。 ありがとうございました!

関連するQ&A