
いつもお世話になっております。
表題の通り、
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の管轄からはずれていますしね。
> 経緯をご説明しますと。
> 客が分かってくれない(笑)
ユーザビリティーというのは、基本的に利用者が絶対です。
「日本語のサーバーだし、日本人向けのページだから」と言われればそれまでです。
適当にごまかすしかないと思います。
日本語の作り方を教えなければ、「アクセスできなくなる」で通じるんじゃないでしょうか?
この回答への補足
長くなったので補足とお礼で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)他が思い浮かばないです↓
なので、(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)
解決後、必ずフィードバックを行います。
よろしくお願い致します。

No.3
- 回答日時:
HTML等の言語の仕様だけでなく、
Webサーバに搭載されたOSの
ファイル管理の仕様も参照されると、
顧客への説明に適した切り口が
見るかるかもしれません。
アドバイスありがとうございます!
ちなみに開発環境 .NET2.0
WEBサバはWindows2003 IIS5.2 R2 ですね。
基本的にはS-JIS管理で問題ないところがまた憎いところです。
IISの方についても、MSが
「globalization 要素に responseHeaderEncoding 属性が用意され、これにより HTTP ヘッダのエンコード方式を指定できるようになりました。」
なんて言ってるもんだから誤解を値かねない。
もうちょっと掘り下げて考えて見ます。
ありがとうございました!

No.2
- 回答日時:
ファイル名でファイルを保存する設計そのものに問題があります。
通常は保存したファイルを連番などで保存し、ダウンロードするときに日本語に変換します。
ファイル名は日本語に限らず、シングルクオートやダブルクオート、[]()が入る可能性もあるため、設計を見直すべきです。
頑張ってください。
この回答への補足
お礼の所に補足を書き込んでしまったのでこちらに。
一応・・・その既に稼動している設計は
ファイルの置き場所:なまでサーバーに
ファイルパスの保存場所:DBでhttp://~ ファイルパス
になっているので、つまるところハイパーリンクのアドレスさえ叩けば誰でもDL可能になっているという仕様です。
今後色んな課題が出てくると思います。
ご指摘、ご回答ありがとうございます。
ご指摘ありがとうございます。
当方、基本的な設計方針はファイルそのものをバイナリでDBに登録する方法を採用していました。
(そういえばASP.NETでファイルのダウンロード時に名称の変換を行うと、WEBサイトのファイル名が付いてしまう現象があったような・・・ちがったかな。)
ちなみに弁解させていただくと、既に本番稼動しているシステムの改修です。
サーバー側にファイルが生で存在していて、ファイルパスへの参照をハイパーリンクで(URLパス)表示してダウンロードさせている仕様です。
一応動いているようなのですが、Excel2000やUTF-8に対応していないアプリが直接起動するような場合に、「名前を付けて保存」で文字化けが発生しています。
ダウンロード専用ボタン等を実装するか、ダウンロード専用ページをワンクッション挟んでハイパーリンクに表示させる(ファイル名はURLエンコードされるので日本語が含まれるダウンロードパスは別途考えるとして)と思いましたが、今度はIE6のUTF-8のファイル名文字化け問題が出てくる・・・
そうなるとヘッダ偽装しかないなと。。。
でもできることなら右クリックで保存したら解決じゃないか。。。それはだめなのね?
って感じです。
ファイル名の問題については、開発者目線では重要なのですが、営業SE目線ではそうでもないようですね。
頑張ります!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- その他(IT・Webサービス) WPからダウンロードしたファイル名を指定したい 2 2022/04/08 08:31
- その他(IT・Webサービス) WEBサイト内のファイルを探す方法は? 1 2022/11/11 16:38
- Visual Basic(VBA) Excel VBA マクロ ホルダー内にある複数のファイルを規則に従い格納をしたいです 4 2022/11/19 10:58
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- ASP・SaaS イントラネットを構築したい 2 2022/04/24 11:08
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リソースビューが表示されない(...
-
テキストエディタvscodeでプロ...
-
ホームページを作りたいのです...
-
COBOLの無料テキストエディタ
-
htmlファイルの表示が真っ白
-
文字化けが直りません。
-
frameでの文字化けする
-
ある一行の変更を全ページに反...
-
Dreamweaverでソースが文字化け...
-
SSIでインクルードしたファイル...
-
eclipseを使ってweb上に表示さ...
-
Dreamweaverでページ全体が文字...
-
HTMLからフォルダを開きたい
-
医療画像(Windows用)をMacで...
-
SEOに、ついて質問します。最近...
-
iPadの標準ブラウザでローカルH...
-
ホームページのコメント欄の作...
-
手打ちでhtml。その意義は (´...
-
三分割フレーム(┤)で、左上の...
-
<!--::Text{UsePoint}::-->とか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストエディタvscodeでプロ...
-
Dreamweaverでページ全体が文字...
-
エクセルで作成した表のハイパ...
-
テキストエディタ grepの機能...
-
「x-sjis」「Shift_JIS」同じ意...
-
HTMLの<a>タグで [テキスト文(....
-
ホームページを作りたいのです...
-
リソースビューが表示されない(...
-
htmlファイルの表示が真っ白
-
eclipseを使ってweb上に表示さ...
-
Dreamweaverでソースが文字化け...
-
HP作成で…日本語と韓国語表示
-
大切なデータを誤って上書きし...
-
オフラインでのHTMLについて
-
htmlファイルが開けません。
-
半角カタカナ(csvやtxtデータ...
-
EUCファイルの扱い方?
-
HTMLファイルからリンクタグだ...
-
文字コードって結局どれを使うの?
-
htmlファイル を ソース...
おすすめ情報