rmiyai さんが書きました:
上記テスト用のページを開くと
ページのHTMLはUTF-8指定となっており、FirefoxのテキストエンコーディングはUnicodeと正常に認識しています。
この状態でshift-jisエンコードのファイル名のファイルをダウンロードすると添付画像の様に文字化けが起こります。
※Download E:Shift JIS Raw をクリックするとファイル名がshift-jisエンコードのファイルがダウンロードできます。
このページをubuntu版google-chrome、operaで同様にダウンロードを行ったところ文字化けは起こりません。
UTF-8とShift-jisが混在している条件がおかしいことは承知の上ですが、
他のブラウザで可能なことが不可能なためFirefoxのファイル名の扱いに問題があると考えております。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition「Content-TypeのcharsetがUTF-8で、Content-Dispositionのファイル名にShift-jisが使われていて、あるいはその逆で、複数の文字コードセットが混在」がおかしいのではありません。
HTTPヘッダーのContent-Dispositionのfilenameパラメーターに許されているのはiso-8859-1のバイナリーのみであり(7bits us-asciiでは無いようです)、
それ以外の場合には、RFC5987エンコーディングを行うfilename*パラメーターを使わなければいけない、
という、「インターネットにおける規則」を無視していることが問題です。
こういった掟破りの碌でもないサイトの不正なfilenameパラメーターのバイナリーデータに対して、
Firefoxは、iso-8859-1を無条件に適用せずに、Content-Typeのcharsetにフォールバックしているようだが、
他のブラウザーは、今も、原理的にはバイナリーから文字コードセットを特定するのは不可能ではあるけれども、
filenameパラメーターのバイナリーから文字コードセットを推測していて、
そのバイナリーがたまたまShift_JISであった場合には、その掟破りの碌でもないサイトの不正なfilenameパラメーターのデータを解釈した時の文字のグリフが、サイトが意図していたグリフ、あるいは、あなたが期待しているグリフと、たまたま同じになった、というだけの話。
原理的に不可能な、文字列のバイナリーからの文字コードセットの特定、を、
他のブラウザーでは、任意の文字コードセットの任意のバイナリーに対して完璧に行っている、
というのならば、
「Firefoxのファイル名の扱いに問題がある」と言ってもいいんでしょうけど、
原理的に不可能であるから、RFC5987エンコーディングとかRFC2047エンコーディングとかが規定されて、メタデータである文字コードセットを指定するようにしているわけでして。
Thunderbirdでも、RFC2047エンコーディングを行っていない不正なSubject:ヘッダーに対して、
原理的に不可能な文字コードの推測のような汚いコードはもう廃止して、7bits-us-asciを内含するするUTF-8として取り扱う、
という決断が、去年あたりになされました。
iso-2022-jpのような、0x1Bといった特異なバイナリーのエスケープシーケンスがある場合には、割と高確率でiso-2022-jpだと当てられてきたんですけどね。
きちんとRFC2047エンコーディングしていないようなメールなんて、多くがジャンクメールであって、未だにそういったメールを送りつけてくるような企業は碌な企業じゃない、というような判断もあったのかもしれません。
また、ブラウザーやメーラーからサーバーに送るパスワードについても、
サーバーに渡されたパスワードのバイナリーをどの文字コードセットとして扱うかは完全にサーバー側の自由で、
以前は、windows-1252のデータを送ってくることを前提にしているサーバーが多かったので、windows-1252で送っていたが、
最近は、utf-8のデータを送ってくることを前提にしているサーバーが増えたので、
既にutf-8に切り替えているか、utf-8で送るようにするリクエストがでています。
パスワードに絡むRFCで、渡すデータはUTF-8である、と規定するものが出てきた、ということもあるかもしれません。
こういった変更は、Thunderbirdが先行しているのではなくて、Mozillaファミリーのコアのコード(Firefoxのコアのコード)におけるUTF-8/Unicodeベースへの転換に追随して行われたものです。
もう、MS/DOS,Windows 3.1,Windows 95といったような、あるいは、古いMSのブラウザー、古いMSのメーラー、といったような、Shift_JIS至上主義の世界ではなくなっているはずです。
古いMSのIEを前提とした、日本国内だけで、一企業内だけで閉じたインターネット環境、というようなものは、もう例外的なものなっていると思います。
少数の例外的なサイトの、ごく少数の例外的なケースの為に、FirefoxやThunderbirdやSeaMonkeyのコードを要求するのは、デベロッパーの、開発のための貴重な時間を奪うだけのものである、と考えるべきだと思います。