北京北大青鳥(niǎo)校區(qū)提供:
擴(kuò)展閱讀:JSP中文亂碼問(wèn)題綜述(1)
2,表單使用Post方式提交后接收到的亂碼問(wèn)題
這個(gè)問(wèn)題也是一個(gè)常見(jiàn)的問(wèn)題。這個(gè)亂碼也是tomcat的內(nèi)部編碼格式iso8859-1在搗亂,也就是說(shuō)post提交時(shí),如果沒(méi)有設(shè)置提交的編碼格式,則會(huì)以iso8859-1方式進(jìn)行提交,接受的jsp卻以u(píng)tf-8的方式接受。導(dǎo)致亂碼。既然這樣的原因,下面有幾種解決方式,并比較。
A,接受參數(shù)時(shí)進(jìn)行編碼轉(zhuǎn)換
String str = new String(request.getParameter(something).getBytes(ISO-8859-1),utf-8) ; 這樣的話,每一個(gè)參數(shù)都必須這樣進(jìn)行轉(zhuǎn)碼。很麻煩。但確實(shí)可以拿到漢字。
B,在請(qǐng)求頁(yè)面上開(kāi)始處,執(zhí)行請(qǐng)求的編碼代碼, request.setCharacterEncoding(UTF-8),把提交內(nèi)容的字符集設(shè)為UTF-8。這樣的話,接受此參數(shù)的頁(yè)面就不必在轉(zhuǎn)碼了。直接使用String str = request.getParameter(something);即可得到漢字參數(shù)。但每頁(yè)都需要執(zhí)行這句話。這個(gè)方法也就對(duì)post提交的有效果,對(duì)于get提交和上傳文件時(shí)的enctype=multipart/form-data是無(wú)效的。稍后下面單獨(dú)對(duì)這個(gè)兩個(gè)的亂碼情況再進(jìn)行說(shuō)明。
C,為了避免每頁(yè)都要寫(xiě)request.setCharacterEncoding(UTF-8),建議使用過(guò)濾器對(duì)所有jsp進(jìn)行編碼處理。
如果不想在每個(gè)文件里都寫(xiě)這樣兩句話,更簡(jiǎn)潔的辦法是使用Servlet規(guī)范中的過(guò)慮器指定編碼,過(guò)濾器的在web.xml中的典型配置和主要代碼
如下: