- ベストアンサー
ファイルダウンロードで、DBCSファイル名が文字化け
- Perlでファイルをダウンロードするスクリプトを作成し、DBCSファイル名が文字化けする問題が発生しています。
- IEとFirefoxでの動作が異なり、ファイル名が化ける原因が特定できません。
- ブラウザに対してファイル名の文字コードを宣言する方法を調査中です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
IEの挙動がおかしいんですけどね。 http://web.sfc.keio.ac.jp/~t03920hm/diary/index.php?mode=diary&date=20050315 USER_AGENTを取得し、そこで分岐させる方法がスタンダードです。 当方はPerlから離れて久しいのでどう取るかは失念しましたが・・・ 他の方に期待。(調べた方が早そうですが^^;) >では、attach.cgiの (snip) >print "Content-type: application; charset=Shift_JIS\n"; >というふうにContent-typeにも文字コードを指定してあげるようにしてはいかがでしょう? 出力されるファイルの文字コードを変えても解決しませんよ。 >print "Content-type: application\n"; >とありますが改行という意味の\nは二回つける方が多く見かけます。 すべてのコードには意味があります。 意味が分からないうちになんとなく使うのは危険だということを認識しましょう。 HTTPの仕様は「最初の空行まではヘッダ」となってます。 // 少し違いますが Perlの場合はヘッダを明示的に書かねばならないので空行(\n\n)を書くのです。
その他の回答 (1)
- n31792
- ベストアンサー率31% (5/16)
では、attach.cgiの print "Content-type: application\n"; とありますContent-typeをいじって print "Content-type: application; charset=Shift_JIS\n"; というふうにContent-typeにも文字コードを指定してあげるようにしてはいかがでしょう? それから一つ気になったのが print "Content-type: application\n"; とありますが改行という意味の\nは二回つける方が多く見かけます。 もしあれでしたら最終的には print "Content-type: application; charset=Shift_JIS\n\n"; というふうに文字コードにプラスしてもう一つ\nをつけてみて下さい。 それは文字バケの解決には関係ないでしょうけど。。
補足
回答ありがとうございます。 ブラウザのキャッシュをクリアした後、attach.cgiにcharset=Shift_JISを試してみました。 情況変わらず、Firefoxではファイル名が文字化けします。 ■変更前 print "Content-type: application;\n"; ■変更後 print "Content-type: application; charset=Shift_JIS\n"; あと、改行の余分な\nは、ここでヘッダーが終わりですよ、という意味だと思っていました。 ヘッダーの1行目で\n\nとしてしまうと、2行目のContent-Dispositionが本文として扱われるのではないでしょうか?
お礼
やはりIEがおかしいのですね。 USER_AGENTで分岐させるようにして回避することにします。 やりかたは知っています。 linuxやMacでのテスト環境がないため、少し不安ですが、今の環境は、Windows以外のVisitがありえ無いクローズな環境なので、これでいきます。 ありがとうございました。