- - PR -
ダウンロード時にファイル名が文字化けする件
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-05-27 15:01
こんにちは。
VS.NETおよびC#のWebアプリケーションで、ダウンロードダイアログを使った ファイルダウンロードをしようとしています。 しかし、漢字かな混じりのファイル名をもつファイルをダウンロードしようとすると、 ダウンロードダイアログの中のファイル名が文字化けしたり、漢字かな部分だけ欠落 したりしてしまいます。 web.Configのglobalizationも”Shift_JIS”にしたのですが、結果は変わりません。 C#のstringはunicodeだそうなので、自前でstringをエンコードする関数を作って ファイル名を変換してみたりもしたのですが、やはり結果は変わりませんでした。 どなたか解決方法を知ってみえませんでしょうか? 以下、ダウンロードする関数です。 private void DownloadFile(string path) { string name = Path.GetFileName( path ); Response.ContentType = type; Response.ContentEncoding = Encoding.GetEncoding("Shift_JIS"); Response.Charset = "shift_jis"; Response.AppendHeader( "content-disposition","attachment; filename=" + Encode(name)); Response.WriteFile( path ); Response.End(); } private string Encode(string str) { Byte[] bytes = Encoding.Unicode.GetBytes(str); Encoding enc = Encoding.GetEncoding("Shift_JIS"); Byte[] s_bytes = Encoding.Convert(Encoding.Unicode, enc, bytes); string ret = enc.GetString(s_bytes); return ret; } | ||||||||
|
投稿日時: 2002-05-27 18:57
私はまったく素人で、な〜んにもしらないのですが、
バイナリ文字列は送受信できるのでしょうか? URLEncode / URLDecode は必要ありませんか? 必要だとすれば、 送信側:ファイル名(SJIS) -[URLEncode]-> 送信 受信側:受信 -[URLDecode]-[SJIS to Unicode]-> ファイル名 か、 送信側:ファイル名(SJIS)-[SJIS to Unicode]-[URLEncode]-> 送信 受信側:受信 -[URLDecode]->ファイル名 すべきかと。 | ||||||||
|
投稿日時: 2002-05-28 14:49
URLEncode/URLDecodeについてよく知らなかったので、ちょっと調べたのですが、
この関数は、URLに空白とかの文字列が埋められないから、非英数文字を「%数値」であらわさ れる文字列に変換するメソッドらしいです。 なので、下の例みたいに、Htmlのタグとその中身をじかにResponseに書く場合は、有意義か と思います。 ダウンロードで使えないかな?といろいろ試したのですが、うまくいきませんでした・・・。 FileInfo[] theFiles = thisOne.GetFiles(); Response.Write("<ul>"); for (int i=0; i < theFiles.Length; i++) { Response.Write("<li><a href=\"showfile.aspx?file="); Response.Write(Server.UrlEncode(theFiles[i].FullName)); Response.Write("\">" + theFiles[i].Name); Response.Write("</a><br>"); } Response.Write("</ul>"); | ||||||||
|
投稿日時: 2002-05-28 15:58
んん?しょむさんがおっしゃっているとおり、UrlEncodeで当方ではうまくいっています。ほやさんのコードの
を次のように変更しただけでちゃんと動作しました(IE6)。
| ||||||||
|
投稿日時: 2002-05-28 16:10
NothingBut.NETFXさんのコードでやったら、うまくいきました!!
ありがとうございます。 (私はなにをやっていたんだか・・・。) ただ、ファイル名中にスペースがあると、スペース部分が"+"に変換されてダウンロードされました。 しょうがないですかねぇ。 (今まで散々文字化けしてたので、「+になるぐらい良しとするか!」という気分ですが。) ためしに、ファイル名を"や'でくくったところ、 "でくくる→ダウンロードダイアログが出てこない。 'でくくる→ファイル名が、'ファイル名'になる。 という結果でした。 [ メッセージ編集済み 編集者: ほや 編集日時 2002-05-28 17:39 ] | ||||||||
|
投稿日時: 2002-06-05 16:28
本題からちょっと外れますが、ダウンロードする方法はどうやって実現しているのでしょうか?。
プログラムを見る範囲ではイベントによってダウンロードさせているように思うのですが。。。。 | ||||||||
|
投稿日時: 2002-06-06 09:20
はい、そうです。
ただ単にダウンロードしてもらうだけなら、そのファイルにハイパー リンクを張ればよかったのですが、プログラム側で、誰がダウンロード したのかを知る必要があったのです。 なので、ダウンロード用のボタンを画面に配置して、それをクリックする ことで、ユーザ(LogOnしている)にはダイアログを出してダウンロードしても らい、プログラム側では、ダウンロードしたと判断するようにしました。 ただ、この方法にも欠点があり、ユーザがダウンロードダイアログでキャンセル ボタンをクリックし、実際はダウンロードを行わなかったとしても、プログラム 側ではその事実がわからないのです・・・。 |
1