ブラウザのファイルダウンロードボックスに非ASCIIファイル名を表示する方法は?

StackOverflow https://stackoverflow.com/questions/149058

  •  02-07-2019
  •  | 
  •  

質問

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

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

Content-disposition:添付; filename =" theasciifilename.doc"

filenameパラメーターでutf8エンコードされた文字列を壊した場合を除き、Firefoxはそれを適切に処理しますが、IEはスローします。

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

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

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

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

役に立ちましたか?

解決

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

他のヒント

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

間違いなく行うべきことは、 RFC 2047 ですが、ブラウザが実際にサポートしているかどうかはわかりません。

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

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

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

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

問題#2への回答(並べ替え):

あるブラウザの命名スキームが他のブラウザでは機能しないことがわかったので、唯一の解決策は、例こちら

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

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

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

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

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

テストケースについては http://greenbytes.de/tech/tc2231/ を参照してから、マイクロソフト、グーグル、アップルに文句を言う。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top