在JSP頁面輸入中文並傳給后台的時候,常常會出現亂碼問題,產生亂碼的原因:java在進行傳值的時候,默認用的是iso-8859-1的編碼形式進行傳輸,而我們jsp頁面常用的則是utf-8的編碼形式。所以,兩者不對應,在解析的時候就出現亂碼現象。
有以下幾種解決方案:
一:在struts.xml文件中添加
<constant name="struts.i18n.encoding" value="utf-8"></constant>
注:這里value="urt-8"指的是頁面的編碼格式,如果頁面的編碼格式是GBK,則寫GBK
二:在Action中重新轉碼:利用.new String(name.getBytes("iso-8859-1"),"utf-8");
例:this.name= new String(name.getBytes("iso-8859-1"),"utf-8");
注:這里的name是從頁面傳過來的參數,只要在這里重新轉碼就可以了,另外,這里的utf-8依然是頁面的編碼格式。
但每次都這樣轉,太麻煩了,因此可以寫一個工具類,將亂碼轉成utf-8
public class Tools{
//提供一個方法,將亂碼轉化成utf-8
public static String getNewString(String input){
String result = "";
try{
result = new String(input.getBytes("iso-8859-1"),"utf-8");
}catch(Exception e){
e.printStackTrace();
}
return result;
}
在用的時候直接調用就行了:userName = Tools.getNewString(name);
三:就是在tomcat中修改server.xml, 個人不推薦這得方法,其一:不穩定,其二:在工作中修改服務器的配置文件不是一件容易的事情,所以這里就不舉例說明。
四:CharacterEncodingFilter的使用,但這個東西不是萬能的,但有時候沒有它就會很麻煩,所以還是加上,以防萬一,但需要說明一點:這個filter只對post請求有效, get請求一律忽略。例:在web.xml中如下配置:
<!--字符編碼-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>