Struts 2ファイルのダウンロードと中国語の文字化け問題の解決案

4564 ワード


ソース:http://www.iteye.com/topic/699246
一、struts.xmlファイル
 
 
<struts>  
  <package name="crud-default" extends="convention-default">   
    <action name="download" class="com.myweb.download.DownLoadAction">  
     <!--type   stream    StreamResult   -->  
    <result name="success" type="stream">   
     <!--    text/plain-->  
     <param name="contentType">application/x-msdownload;charset=ISO8859-1</param>  
     <!--      inputStream,      StreamResult    inputName      getter   ,   
       getInputStream()           ,      Action        -->  
     <param name="inputName">inputStream</param>  
     <!--     inline(    ),    attachment             ,filename   
           ,                   ,   download.action       -->  
     <param name="contentDisposition">attachment;filename="${fileName}"</param>  
     <!--           -->  
     <param name="bufferSize">4096</param>  
    </result>  
    </action>   
   </package>  
</struts>  
 
 
二、comp.myweb.download.Down LoadAction のファイルコード 
 
 
  public class DownLoadAction extends ActionBase {  
    private Logger logger = LoggerFactory.getLogger(DownLoadAction.class);  
    private String fileName = null;  
    public String execute() throws Exception {  
        return "success";  
    }  
    public InputStream getInputStream() {  
      this.fileName = json.substring(json.lastIndexOf("\\") + 1, json.length());  
      return Struts2Utils.getSession().getServletContext().getResourceAsStream(json);  
    }  
  
    public String getFileName() {  
        try {  
             Struts2Utils.getResponse().setHeader("charset","ISO8859-1");  
             return new String(this.fileName.getBytes(), "ISO8859-1");     
        } catch (UnsupportedEncodingException e) {  
            return "          !";  
        }  
    }  
}  
 
 
発生した問題:ファイルはダウンロードできますが、websphere環境でダウンロードしたファイルの中国語名は文字化けしています.問題を解決する手順は以下の通りです.
 
まず、struts.xmlファイルを修正しました.
Struts2 文件下载及中文乱码问题的解决方案_第1张图片第二に、Down LoadAction.javaファイルのget FileName方法を修正しました.
 
 
    public String getFileName() {  
          try {  
             return new String(this.fileName.getBytes(), "ISO8859-1");     
          } catch (UnsupportedEncodingException e) {  
             return "          !";  
          }  
    }  
 
 
新しいポップアップIEウィンドウでは、最初のダウンロード時に、ダウンロードメッセージボックスの中国語は依然として文字化けで、再度ダウンロードすれば、正常に中国語が表示されます.アプリケーションパッケージ全体のデフォルトコードはUTF-8です.最初にダウンロードした後、クライアントブラウザのデフォルトコードはISO 8859-1に変更されました.再度中国語をダウンロードすれば正常に表示されます.この時、IEブラウザの文字セットコードは西欧ISOです.
 
Struts2 文件下载及中文乱码问题的解决方案_第2张图片
 
上の図に示すように、ブラウザのデフォルトコードはUTF-8から西欧ISOに変更されました.今回の初めてのダウンロード時に文字化けが発生した問題をどう解決しますか?第三に、Down LoadAction.javaファイルのget FileName方法を引き続き修正する.
 
  public String getFileName() {
      try {
      
      
       //         http Header,                
       Struts2Utils.getResponse().setHeader("charset","ISO8859-1"); 
         return new String(this.fileName.getBytes(), "ISO8859-1");  
      } catch (UnsupportedEncodingException e) {
         return "          !";
      }
    } 
 
添付:全体的にUTF-8に変更した場合、逆に「未知のファイル名」というエラーメッセージが表示されます.http要求でデフォルトのコードはISO 8859-1である可能性があります.