IE7で、ダウンロード時に特定の文字が化ける

日本語名を含むファイルのダウンロード時に、ダイアログで

  構 → 浩
  表 → 廟
  ポ → ダ
  申 → 神

というように、特定の文字について別の文字に置き換わってしまうという問題。原因は、どうやら文字コードに隠れている模様で、

  構(0x8D5C) → 浩(0x8D5F)
  表(0x955C) → 廟(0x955F)
  ポ(0x837C) → ダ(0x835F)
  申(0x905C) → 神(0x905F)

上記の通り、2バイト目が 5C → 5F, 7C → 5F と置き換わっています。さて、この 5C, 7C, 5F は何者かというと、

  \ (0x5C)
  | (0x7C)
  _ (0x5F)

つまり、シングルバイトの文字である "\" や "|" を置き換える処理が悪さして、マルチバイトの文字にまで悪影響を及ぼしているということらしいです。
この問題について、2chで次のような推測を書かれている方がいました。推測ではありますが、説得力という意味では十分です。頼むぜ Microsoft!

  ファイル名の文字化けだけど、元々IE6.0では「\」や「|」があると、
  保存ファイル名が指定したファイル名ではなくなってしまう、という現象がある様子。
  (内部ファイル名やランダムなファイル名になるっぽ)
  おそらくIE7でそれを避けるべく、ファイル名にある「\」や「|」を「_」に
  変換してくれてるんでしょう。
  マイクロソフト、気が利くね。
  ただ、その変換が5Cや7Cを含む2バイト文字への対応が不十分で、
  要は不具合で現状、どうにも手を打てそうにないってことが分かってきました。

対応策は、
・これらの文字を使わない(推奨:シングルバイト文字のみでファイル名を構成する)
Microsoftがこのバグを修正するまで待つ
これくらいしかなさそうですね。サーバー側は正しい Content-Type を返しているので、対応の仕様が無いし。


IE7ってまだまだ情報が少なくて、私もこの問題の特定するのに苦労しました。同じ道を通る人が、このエントリを役立ててくれればな~と思います。