2

現在、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 でも同じ問題が発生しました。

4

3 に答える 3

2

Response.CharsetHTTP リクエストの本文のみに関係します。HTTP 仕様によると、ヘッダーは ISO-8859-1 として暗黙的にエンコードされます。このエンコード外の文字はMIMEエンコードする必要があります。

これは論理的なものにすぎません。結局のところ、によって設定された本文エンコーディングResponse.Charset自体がヘッダーで指定されます。

于 2009-09-16T13:21:53.767 に答える
2

ようやく機能しました... :)

を使用System.Web.HttpUtility.UrlPathEncodeするとガベージの問題は解決しますが、ファイルを開くと、ファイル名に実際の日本語の文字ではなく、Unicode でコード化されていない名前が表示されます。

したがって、使用する代わりにSystem.Web.HttpUtility.UrlPathEncode、応答ヘッダーに使用されるエンコーディングを使用してファイル名をデコードする必要があります。

.NET では、デフォルトで応答ヘッダーのエンコーディングは 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 開発サーバーで動作するかどうかは問題ではありません)

于 2010-06-03T12:57:44.103 に答える