在JSP的輸入框中寫入中文,傳給後台的時候,常常會出現亂碼問題:
今天看了韓順平老師的視頻,對亂碼問題有了初步的認識,又經過自己的實踐,把總結寫出來。
產生亂碼的原因:java在網絡上進行傳輸的時候,用的是iso-8859-1的編碼形式進行傳輸。所以,在編碼和解碼(得到傳遞值)的時候,要對應起來。。
解決方法主要有三個:
1.重新轉碼new String(u.getBytes("iso-8859-1"),"gb2312");
2.使用過濾器來解決[不穩定]
3.通過配置server.xml文件[不太穩定]
例 :
String userName = requset.getParameter("userName");
userName = new String(userName.getBytes("iso-8859-1"),"gb2312");
但每次都這樣轉,還是太麻煩了,因此可以寫一個工具類,提供這個將亂碼轉成gb2312.
public class Tools{
//提供一個方法,將亂碼轉化成gb2312
public static String getNewString(String input){
String result = "";
try{
result = new String(input.getBytes("iso-8859-1"),"gb2312");
}catch(Exception e){
e.printStackTrace();
}
return result;
}
在用的時候,
String userName = request.getParameter("userName");
userName = Tools.getNewString(u);
注:在用這種方法時,後面的不一定就是gb2312,可以是gbk,utf-8.具體是哪一種,要取決於向該控制器傳值的頁面是哪個編碼。
比如我的login.jsp中,是<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,因此,我就得用
id = new String(id.getBytes("iso-8859-1"),"utf-8");了。。。不能犯照抄的錯誤呀。
第三種方法:韓老師只是說了這種方法可以解決,它自己試驗時沒能通過,我試驗也沒能通過。可能和tomcat的版本有關系 。
在tomcat的配置文件server.xml中,
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
加一個屬性 URIEncoding="GBK"