今天在項(xiàng)目里碰到了非常糾結(jié)的問(wèn)題——中文亂碼問(wèn)題。

原因是這樣的,我打算通過(guò)JSF的一個(gè)FRAME控件LOAD一個(gè)jsp頁(yè)面,該jsp頁(yè)面根據(jù)GET參數(shù)得到文件的路徑和文件名,從而可以將文件用二進(jìn)制流輸出給瀏覽器,以便下載。

但是由于我本地的文件名是中文的,所以出現(xiàn)了亂碼問(wèn)題。

簡(jiǎn)單點(diǎn)說(shuō),主要有以下幾點(diǎn):

1. 用java創(chuàng)建本地文件的中文文件名問(wèn)題:

為了保證你的文件名不會(huì)亂碼,在用java.io.File對(duì)象創(chuàng)建文件的時(shí)候,構(gòu)造函數(shù)里的filename千萬(wàn)不要隨意的轉(zhuǎn)換成其他字符集的。就用默認(rèn)的就好。也就是說(shuō)

File f= new File(“中文文件.txt”);

足矣。這樣,無(wú)論Windows用GBK編碼文件名還是LINUX用UTF-8編碼文件名,都可以在當(dāng)前的系統(tǒng)中正常的查看。

2.向JSP傳遞中文參數(shù)的時(shí)候,如果你沒(méi)有設(shè)定Tomcat的全局URIEncoding,一定要把中文參數(shù)進(jìn)行URLEncoding

URLEncoder.encode(requestUrl,"UTF-8");

在被請(qǐng)求的頁(yè)面,執(zhí)行URLDecoder.decode(request.getParameter(“param”),"UTF-8");從而得到正確的中文。如果不能,可以嘗試“new String(request.getParameter(“param”).getBytes("iso8859_1"),”UTF-8”)”

3.如果你在POST傳參的時(shí)候發(fā)現(xiàn)出了問(wèn)題,

可以在web.xml里面配置一個(gè)CharacterEncodingFillter。這個(gè)東西網(wǎng)上有很多代碼,自己找吧。如果你用的是Spring,可以用它自帶的org.springframework.web.filter.CharacterEncodingFilter

4.另一種解決參數(shù)亂碼的辦法就是修改TOMCAT的配置文件。

找到server.xml。把里面HTTP端口和HTTPS端口(如果你放開了)的Connector元素后面加上URIEncoding=”UTF-8”字樣。


文章來(lái)源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!819.entry