8

非ASCII形式でヘッダーパラメータを送信する方法は受け入れられていないようです。

通常、ファイル ダウンロードのヘッダーは次のようになります。

Content-disposition: 添付ファイル。ファイル名="theasciifilename.doc"

ファイル名パラメーターで utf8 でエンコードされた文字列を壊した場合を除いて、Firefox は問題なく処理しますが、IE はスローします。

ファイル名をエンコードする方法を説明するドキュメントが CodeProject にあります。

このドキュメントは、Bản Kiểm Kê.doc を、バイトを 16 進法でエンコードして B%e1%ba%a3n%20Ki%e1%bb%83m%20K%c3%aa.doc にエンコードします。

問題 #1: その文字列の最初の文字: ả の値は ả です -- その数値を 16 進数にエンコードすると、%a3%1e が得られます。この男はどのようにして %e1%ba%a3 を手に入れたのですか? (ここでは明らかに単純なものが欠けています)

問題 #2: IE はこのエンコーディングを認識しますが、Firefox は認識しません! 何をすべきか?

4

6 に答える 6

8

仕様上、基本的に US-ASCII 以外は許可されていません。HTTP ヘッダーは US-ASCII です。HTTP のペイロードのデフォルトは ISO 8859-1 ですが、これはヘッダーではなくコンテンツの本文を参照します。

おそらく正しいことは、 RFC 2047で説明されているように、非 ASCII データをヘッダーにエンコードするために MIME の手法を使用することですが、ブラウザーが実際にそれをサポートしているかどうかはわかりません。

編集:おっと、いいえ、RFC 2047 セクション 5 は、エンコードされたフォームが Content-Disposition で許可されていないと明示的に述べています。運が悪いようです-標準はありません。

編集 2:標準があります - RFC 2231は、これがどのように機能するかを定義しています。一部のブラウザではサポートされていますが、IE ではサポートされていません。それがどのように機能し、どのブラウザがサポートされているかを示すテストケースをいくつか見つけました。

于 2008-09-29T22:45:16.727 に答える
3

質問 1 への回答: Unicode と UTF-8 を混同しています。「ả」の 16 進値は 0xA31E ですが、これは UTF-8 文字ではありません。UTF-8 では、その文字には 3 バイトが必要0xE1 0xBA 0xA3です。URL エンコーディングは非 ASCII エンコーディングに対して適切に定義されていませんが、%e1%ba%a3 はその文字に使用する有効な UTF-8 エンコーディングです。

于 2008-09-29T15:18:06.020 に答える
2

問題 2 については、Internet Explorer と Firefox の両方でファイル名を URL エンコードする必要があります。唯一の違いは、Firefox で RFC 2231 の形式を使用する必要があることです。これは、Firefox 3 および Internet Explorer 7 に適用されます。

于 2008-11-04T00:07:04.203 に答える
1

上記のリンクでは、 e1 ba a3 は、文字コードではなく、言及された文字の UTF-8 エンコーディングです。

于 2008-09-29T15:10:24.463 に答える
0

残念ながら、現在のところ、すべてのユーザー エージェントで機能する単一の方法はありません。

テスト ケースについてはhttp://greenbytes.de/tech/tc2231/を参照し、Microsoft、Google、Apple に苦情を申し立ててください。

于 2009-01-15T15:46:47.707 に答える
0

問題#2への回答(一種):

あるブラウザの命名スキームが別のブラウザでは機能しないことがわかったので、唯一の解決策は、こちらの例のように、ブラウザごとに異なる方法で行うことです。

リンクがなくなった場合の解決策は基本的に次のとおりです。

1. If browser is IE URL encode filename
2. Generate Content-disposition header

もちろん、ブラウザーが IE であるかどうかを User-agent で判断すること (これが唯一の方法です) には、あらゆる種類の通常の危険が伴います。

これは北米中心のように聞こえますが、ユーザーエージェントがブロックまたは変更されている可能性がある、制御できない多数のブラウザーでこれが機能することが重要な場合は、ファイル名で UTF-8 エンコードされた文字を避け、常に「ダウンロード」などを使用してください。

于 2008-09-29T16:37:32.490 に答える