color さんが書きました:
yahooメールを使用して、ファイルをDLするときに文字化けを起こします。99.9%ここからのDlで文字化けをしてしまいます。
web上からのDLですが、かなり前に行ったため忘れてしまいました。すみません。
yahooメールを使用してファイルをDLするときに文字化けをしてしまいます。
調べてみたところ, Yahoo が返してくる応答がどうもおかしいようです.
Thunderbird を用いて「テスト.zip」を Yahoo メールのアカウントに送信してみました.
このときメール中の添付ファイルのヘッダには以下が含まれていました.
コード:
Content-Disposition: inline;
filename*=ISO-2022-JP''%1B%24%42%25%46%25%39%25%48%1B%28%42%2E%7A%69%70
これは RFC2231 で定義されている記法で,
ファイル名は URL エンコードされた ISO-2022-JP の文字列
「%1B%24%42%25%46%25%39%25%48%1B%28%42%2E%7A%69%70」である, という意味です.
これをデコードすると「テスト.zip」となります.
Yahoo メールの従来のバージョンでダウンロードした場合
以下のようなヘッダが返ってきました.
コード:
Content-Disposition: attachment; filename="filename*=ISO-2022-JP''%1B%24%42%25%46%25%39%25%48%1B%28%42%2E%7A%69%70"
これは, ファイル名は「filename*=ISO-2022-JP''%1B%24%42%25%46%25%39%25%48%1B%28%42%2E%7A%69%70」である, という意味で, 当然そのままのファイル名になります.
ただし, ファイル名に使えない文字は「_」等に置き換えられるので,
OS によって多少異るかもしれません.
早い話が「filename=」等が余計で, 正しくは以下のようなヘッダであるべきです.
コード:
Content-Disposition: attachment; filename*=ISO-2022-JP''%1B%24%42%25%46%25%39%25%48%1B%28%42%2E%7A%69%70
また, Yahoo メールのベータ版でダウンロードした場合は
以下のようなヘッダが返ってきました.
コード:
Content-Disposition: attachment; filename="%E3%83%86%E3%82%B9%E3%83%88.zip";
これは, ファイル名は「%E3%83%86%E3%82%B9%E3%83%88.zip」であるという意味です.
IE は特殊で, これを URL エンコードされた UTF-8 の文字列としてデコードするため,
ファイル名は「テスト.zip」になります.
他のブラウザではそのままのファイル名になります.
IE 以外のブラウザの場合は RFC2231 に従い以下のようになっているべきです.
コード:
Content-Disposition: attachment; filename*=UTF-8''%E3%83%86%E3%82%B9%E3%83%88.zip
いずれの場合の Yahoo 側のバグといえると思うので,
報告をして気長に待つのがよいかと思います.
以下, Content-Disposition に関して Hotmail, sky Drive で似たような
トラブルが報告されています.
http://forums.mozillazine.jp/viewtopic.php?t=9140
http://forums.mozillazine.jp/viewtopic.php?t=9105
ブラウザごとに適切な Content-Disposition の値を返す方法は
あまり知られていないようですね.