1. 程式人生 > >web開發中文亂碼問題及解決方案

web開發中文亂碼問題及解決方案

public class CodingConvert
{  
public CodingConvert()
{
//
}
public String toGb(String uniStr){
     String gbStr = "";
     if(uniStr == null){
   uniStr = "";
     }
     try{
   byte[] tempByte = uniStr.getBytes("ISO8859_1");
   gbStr = new String(tempByte,"GB2312");
     }
catch(Exception ex){
    }
     return gbStr;
}
  
public String toUni(String gbStr){
     String uniStr = "";
     if(gbStr == null){
   gbStr = "";
     }
     try{
   byte[] tempByte = gbStr.getBytes("GB2312");
   uniStr = new String(tempByte,"ISO8859_1");
     }catch(Exception ex){
    }
    return uniStr;
}
}
你也可以在直接的轉換,首先你將獲取的字串用ISO-8859-1進行編碼,然後將這個編碼存放到一個位元組陣列中,然後將這個陣列轉化成字串物件就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通過上述轉換的話,提交的任何資訊都能正確的顯示。
(三)     在Form#get請求在服務端用request. getParameter(“name”)時返回的是亂碼;按tomcat的做法設定Filter也沒有用或者用 request.setCharacterEncoding("GBK");也不管用問題是出在處理引數傳遞的方法上:如果在servlet中用 doGet(HttpServletRequest request, HttpServletResponse response)方法進行處理的話前面即使是寫了:
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
也是不起作用的,返回的中文還是亂碼!!!如果把這個函式改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。
同樣,在用兩個JSP頁面處理表單輸入之所以能顯示中文是因為用的是post方法傳遞的,改成get方法依舊不行。
由此可見在servlet中用doGet()方法或是在JSP中用get方法進行處理要注意。這畢竟涉及到要通過瀏覽器傳遞引數資訊,很有可能引起常用字符集的衝突或是不匹配。
解決的辦法是:
1) 開啟tomcat的server.xml檔案,找到區塊,加入如下一行:
URIEncoding=”GBK”
完整的應如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>