« パラメータ値に日本語を含むリンクをたどって文字化け | トップページ | postgreSQL で table owner 一括変更 »

2011.06.10

ファイルダウンロード時の日本語ファイル名の文字化け

ファイルダウンロード時、ブラウザが表示するダウンロード確認のダイアログボックスで日本語のファイル名が化けてしまう場合、サーバー側のレスポンスヘッダでブラウザごとにファイル名の指定方法を変える必要がある。(とここに書いてあった)


  protected void doOutput(RunData rundata) 
    throws Exception 
  {
    ParameterParser parser = rundata.getParameters();
    String encoding = parser.getCharacterEncoding();
    parser.setCharacterEncoding("Shift_JIS");
    String filename = parser.getString("filename");
    parser.setCharacterEncoding(encoding);

    //(省略)

    HttpServletRequest request = 
                            rundata.getRequest();
    String agent = request.getHeader("User-Agent");
    agent = agent.toUpperCase();
    if (agent.indexOf("MSIE") > -1) {
      filename = URLEncoder.encode(
                filename, "UTF-8");
    } else
    if (agent.indexOf("FIREFOX") > -1 
    || agent.indexOf("CHROME") > -1) 
    {
      filename = MimeUtility.encodeWord(
                filename, "ISO-2022-JP", "B");
    }
    HttpServletResponse response =
                      rundata.getResponse();
    response.setHeader(
        "Content-disposition",
        "inline; filename=\"" + filename + "\"");

IEの場合はURLエンコード、Firefox、ChromeはMIME-Bエンコーディング。その他のブラウザでは手がないらしいから害の無い名前に変えちゃいましょうということですね。

ちなみに、各ブラウザはレスポンスヘッダに日本語がある場合、これをShift_JISと仮定して読み取るから化けるらしい。レスポンスの日本語エンコーディングが元からShift_JISなら化けないらしい。未確認だけど。つか最近UTF-8しか使わないしなぁ。

« パラメータ値に日本語を含むリンクをたどって文字化け | トップページ | postgreSQL で table owner 一括変更 »

プログラミング」カテゴリの記事

Java / Apache」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ファイルダウンロード時の日本語ファイル名の文字化け:

« パラメータ値に日本語を含むリンクをたどって文字化け | トップページ | postgreSQL で table owner 一括変更 »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント