日本語のファイル名のASP .NETダウンロードファイル
-
07-07-2019 - |
質問
現在、ASP .NETアプリケーションにVisual Studio 2008を使用しています。 Responseオブジェクトを介してExcelファイルをサーバーにしようとしています。問題は、ファイルのタイトルを日本語に設定できないように見えることです。日本語のファイル名に設定すると、文字化けとして返されます。日本語版WinXPで日本語版IEブラウザを使用しています。
Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", "日本語.xls"));
または
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", Server.HtmlEncode("日本語.xls")));
すでにエンコーディングをShift-JISに変更しようとしました
Response.Charset = "Shift_JIS";
または
Response.Charset = "sjis";
アイデアはありますか?ところで、私はVisual Studio 2005でも同じ問題を抱えていました。
解決
私はASPの専門家ではありませんが、UrlEncodeを使用してファイル名を再コーディングしようとしましたか?
Response.AddHeader("Content-Disposition",
System.Web.HttpUtility.UrlEncode(String.Format("attachment; filename=\"{0}\"", "日本語.xls")));
他のヒント
ようやく機能しました...:)
System.Web.HttpUtility.UrlPathEncode
を使用するとガベージの問題は解決しますが、ファイルを開くと、実際の日本語の文字ではなく、ユニコードでエンコードされていない名前がファイル名に表示されます。 IE7およびIE6の問題、UrlPathEncodeはIE8で正常に動作します。
したがって、 System.Web.HttpUtility.UrlPathEncode
を使用する代わりに、Responseヘッダーに使用されるエンコードを使用してfilnameをデコードする必要があります。
.NETでは、デフォルトで、Responseヘッダーのエンコードはutf-8であるため、iso-8859-1に変更します。 以下に示すように、同じようにweb.configを変更します。
<globalization responseHeaderEncoding="iso-8859-1" .../>
そしてコードは次のようになります
//apply Response header's encoding i.e. iso-8859-1 to the filename.
Dim fileName as String = "在庫あり全商品を24時間以内に出荷.doc"
Dim enc As Encoding = Encoding.GetEncoding("shift_jis")
Dim dec As Encoding = Encoding.GetEncoding("iso-8859-1")
fileName = dec.GetString(enc.GetBytes(fileName))
//Show Download Dialog box and Writting it on Client Side.
Response.ClearHeaders()
Response.ContentType = corspBean.ContentType
Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """")
Response.BinaryWrite(bytes)
Response.End()
もう1つ重要なことは、そのために多くの時間を無駄にしたことです。これはASP.NET開発サーバーでは機能しません、つまり、Webのテスト/デバッグに使用するサーバーですローカルマシン上のアプリ。したがって、ソリューションをIISに展開し、そこからテストします。 IISで完全に機能します。 (およびIISはすべてのASP.NETアプリの運命です。)ASP.NET開発サーバーで動作するかどうかは関係ありません)