Servlet Get方式傳參數中文亂碼問題

 剛開始網上百度了一番,很多人是這樣解決的:
jsp頁面上先給中文字符編碼 
http://xxx.xxx.com?filename=<%=java.net.URLEncoder.encode("哥就是中文亂碼.pdf","GB2312")%> 或者http://xxx.xxx.com?filename=<%=java.net.URLEncoder.encode("哥就是中文亂碼.pdf","UTF-8")%> 
後臺servlet中  
String fileName = request.getParameter("filename");
fileName = java.net.URLDecoder.decode(fileName ,"GB2312");
或者 String fileName = request.getParameter("filename");
fileName = java.net.URLDecoder.decode(fileName ,"UTF-8");
然而並沒有什麼卵用,亂碼還是亂碼。於是放棄百度,查servlet源碼,終於知道了原因。就是由於在request.getParameter("name")之前會自動做一次解碼的工作(無法認爲干預),而且是默認的ISO-8859-1解碼。所以,在使用java.net.URLEncoder.encode()和java.net.URLDecoder.decode(),各用兩次。
jsp中修改爲:
http://xxx.xxx.com?filename=<%=java.net.URLEncoder.encode(java.net.URLEncoder.encode("哥就是中文亂碼.pdf","GB2312"),"GB2312")%> 或者
http://xxx.xxx.com?filename=<%=java.net.URLEncoder.encode(java.net.URLEncoder.encode("哥就是中文亂碼.pdf","UTF-8"),"UTF-8")%> 
 
後臺servlet修改爲:
String fileName = request.getParameter("filename");
fileName = java.net.URLDecoder.decode(java.net.URLDecoder.decode(fileName ,"GB2312"),"GB2312");
或者 String fileName = request.getParameter("filename");
fileName = java.net.URLDecoder.decode(java.net.URLDecoder.decode(fileName ,"UTF-8"),"UTF-8");
完美!!!
就這樣,無聊的一天又過去了...... 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章