產生亂碼的原因:java在網路上進行傳輸的時候,用的是iso-8859-1的編碼形式進行傳輸。所以,在編碼和解碼(得到傳遞值)的時候,要對應起來。。
解決方案如下:
方法一:重新轉碼new String(u.getBytes("iso-8859-1"),"gb2312");
例 :
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.具體是哪一種,要取決於向該控制器傳值的頁面是哪個編碼。
方法二:.通過配置server.xml檔案[不太穩定]
1. 有人說配置tomcat的設定檔server.xml裡這句:
<Connector URIEncoding="GB2312"
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
加上這句:URIEncoding="GB2312"
2. 雖然可以但是有前提的,若果你過濾器沒有配置,
則只是配置了server.xml檔案,這樣只有在表單是get傳值時候才可以!
當是post方式時,照樣是亂碼!
*這時我們就可以看出在tomcat5中的post與get傳值方式是不一樣的*
*有人要問有沒有一種方法讓傳值使用get方式或post方式都好用呢,
就用下面的方法三*
方法三:
1. 就是先配置過濾器,又配置server.xml檔案,都設定成GB2312的編碼
2. 這樣無論是post還是get方式的表單傳值,中文都不會是亂碼!