2

次のコードを使用して、サーバーからクライアントにファイルを送信します。

Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
Response.ContentType = MimeType;
Response.WriteFile(PathToFile);
Response.End();

これはうまくいきます。問題は、Internet Explorer からファイルをダウンロードすると、デンマーク語の æ、ø、å などの特殊文字が間違って解釈されることです。したがって、「Test æ ø å file.txt」という名前のファイルは、「Test æ_ø_Ã¥ f​​ile.txt」としてダウンロードされます。

応答にバイト オーダー マークを追加してみました。

byte[] BOM = { 0xEF, 0xBB, 0xBF };
Response.BinaryWrite(BOM);

そして文字セットを設定します:

Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;

しかし、それが役に立った場合はありません。これは、Internet Explorer でのみ発生する問題のようです。

4

3 に答える 3

4

ヘッダーはコンテンツのエンコーディングを使用しないため、コンテンツのエンコーディングを変更しても役に立ちません。ヘッダー パラメーターのエンコーディングを指定するための標準がありますが、これはかなり新しいものであるため、すべてのブラウザーで完全にサポートされているわけではありません。

http://greenbytes.de/tech/webdav/rfc5987.html

これは、名前をエンコードする方法です。

string FileName = "Test æ ø å file.txt";

string name = String.Concat(Encoding.UTF8.GetBytes(FileName).Select(b => {
  if ((b >= 48 && b <= 57) || (b >= 65 && b <= 90) || (b >= 97 && b <= 122)) {
    return new String((char)b, 1);
  } else {
    return String.Format("%{0:x2}", b);
  }
}).ToArray());

Response.AppendHeader("content-disposition", "attachment; filename*=UTF-8''" + name);

ヘッダーで終わるテキストは次のようになります。

attachment; filename*=UTF-8''Test%20%c3%a6%20%c3%b8%20%c3%a5%20file%2etxt

注: このコードは、英数字を除くすべての文字をエンコードします。これは機能しますが、他のすべての文字にエンコードが必要なわけではありません。標準を確認した後、コードを進化させて、エンコードされていない文字をさらにいくつか残すことができます。

于 2013-01-21T07:57:43.837 に答える
1

以下のような特定のファイルタイプを指定してみてください(これはExcelファイルタイプ用です)-

Response.ContentType = "application/vnd.ms-excel";

テキスト応答のダウンロードを強制するコンテンツ タイプを参照してください。

于 2013-01-21T07:44:10.657 に答える
0

Internet Explorer のファイル名の問題を回避する方がはるかに簡単です。ここで答えを見つけることができます。

他のブラウザーではファイル名がHttpUtility.UrlPathEncode(yourFileName)台無しになるため、ブラウザー ( Request.Browser.Browser) が Internet Explorer (バージョン 10 までのIE 、バージョン 11 以降のInternet Explorer) であるかどうかを確認する必要があります。

于 2015-12-11T11:24:29.687 に答える