首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts2 下載中文檔名亂碼解決:Content-Disposition 編碼處理

     編輯:程式設計綜合問答

Struts2 XML 配置下載動作時,中文檔名在瀏覽器顯示為亂碼,需對 Content-Disposition 標頭中的 filename 進行正確編碼。

核心方案:UTF-8 編碼 + RFC 5987 格式

在 Action 中重寫 getContentDisposition() 或攔截器設定標頭:

String fileName = "中文檔名.pdf";
String encodedName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedName);

Struts2 內建支援

若使用 stream Result Type,可在 struts.xml 設定:

<result type="stream">
    <param name="contentDisposition">attachment; filename*=UTF-8''${encodedFileName}</param>
    <param name="inputName">inputStream</param>
</result>

Action 需提供 getEncodedFileName() 返回已編碼字串。

兼容舊版瀏覽器

同時提供 filename (ISO-8859-1) 與 filename* (UTF-8) 兩種格式:

response.setHeader("Content-Disposition", 
    "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\"; " +
    "filename*=UTF-8''" + encodedName);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved