今天在項目里碰到了非常糾結的問題——中文亂碼問題。
原因是這樣的,我打算通過JSF的一個FRAME控件LOAD一個jsp頁面,該jsp頁面根據GET參數得到文件的路徑和文件名,從而可以將文件用二進制流輸出給瀏覽器,以便下載。
但是由于我本地的文件名是中文的,所以出現了亂碼問題。
簡單點說,主要有以下幾點:
1. 用java創建本地文件的中文文件名問題:
為了保證你的文件名不會亂碼,在用java.io.File對象創建文件的時候,構造函數里的filename千萬不要隨意的轉換成其他字符集的。就用默認的就好。也就是說
File f= new File(“中文文件.txt”);
足矣。這樣,無論Windows用GBK編碼文件名還是LINUX用UTF-8編碼文件名,都可以在當前的系統中正常的查看。
2.向JSP傳遞中文參數的時候,如果你沒有設定Tomcat的全局URIEncoding,一定要把中文參數進行URLEncoding
URLEncoder.encode(requestUrl,"UTF-8");
在被請求的頁面,執行URLDecoder.decode(request.getParameter(“param”),"UTF-8");從而得到正確的中文。如果不能,可以嘗試“new String(request.getParameter(“param”).getBytes("iso8859_1"),”UTF-8”)”
3.如果你在POST傳參的時候發現出了問題,
可以在web.xml里面配置一個CharacterEncodingFillter。這個東西網上有很多代碼,自己找吧。如果你用的是Spring,可以用它自帶的org.springframework.web.filter.CharacterEncodingFilter
4.另一種解決參數亂碼的辦法就是修改TOMCAT的配置文件。
找到server.xml。把里面HTTP端口和HTTPS端口(如果你放開了)的Connector元素后面加上URIEncoding=”UTF-8”字樣。
文章來源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!819.entry