jboss get請求中文亂碼問題的解決[zt]

longerandlonger發表於2012-04-17

http://yekui.iteye.com/blog/1029778

有的時候 我們在通過後臺取前臺的資料的時候會出現亂碼 
比如 String username = request.getParameter("username");時就會出現。

解決辦法:如果你想單獨解決這一個,那你就用 
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"GBK")

如果想統一解決永無後顧之憂(前提是儘量都採用一種方式,否則以前有用過上面的方式的回出現亂碼): 
如果用的伺服器是jboss: 找到server\default\deploy\jbossweb-tomcat55.sar\server.xml  開啟  找到 
<Connector port="8080" address="${jboss.bind.address}" 
         maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" 
         emptySessionPath="true" 
         enableLookups="false" redirectPort="8443" acceptCount="100" 
         connectionTimeout="20000" disableUploadTimeout="true"/> 
換成 
<Connector port="8080" address="${jboss.bind.address}" 
         maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" 
         emptySessionPath="true" 
         enableLookups="false" redirectPort="8443" acceptCount="100" 
         connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 
ok 重新發布,重啟一下jboss 搞定。

如果用的是 tomcat伺服器:同上,找到 Tomcat 6.0\conf\server.xml

<Connector port="8989" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" /> 
換成 
<Connector port="8989" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="GBK" />

當然這種修改伺服器的方法雖然可以解決辦法,但是這並不是最好的辦法。如果能夠用修改程式的辦法來達到同樣的效果的話 建議還是用修改程式的辦法

 

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=gb2312">

 

<%request.setCharacterEncoding("gb2312");%>

 

servlet&jsp亂碼問題
SERVLET
1、頁面本身有中文的時候,一個要在寫PrintWriter out = resp.getWriter();之前加這句話:
   resp.setContentType("text/html;charset=GBK");
2、解決POST方式提交表單的中文亂碼問題方法:
   在獲得第一個引數之前加以下語句:req.setCharacterEncoding("GBK");
3、解決GET方式提交表單的中文亂碼問題方法:
   修改conf目錄下的server.xml 在Connector標籤中(即修改8080埠的標籤)中加一句話
   URIEncoding="GBK"

JSP
加入以下兩段程式碼則可解決大部分亂碼問題:
<%@ page contentType="text/html;charset=GBK"%>
<%request.setCharacterEncoding("GBK");%>

 

解決Servlet中的中文亂碼問題:
1、靜態中文資訊亂碼
response.setContentType("text/html; charset=gbk");
2、中文輸入亂碼
request.setCharacterEncoding("gbk");
String name =new String(request.getParamete("name").getBytes("iso-8859-1"));

servlet中輸出流的預設字元編碼是ISO-8859-1的

 

fileName=response.encodeURL(new String(fileName.getBytes(),"ISO8859_1"));//轉碼

 


執行後結果如下:


匿名 回答:2 人氣:3 解決時間:2010-04-22 22:28 
滿意答案好評率:0% 樓上的說法是對的。。但是寫的不對

String name=request.getParameter("name");

name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

 
評價答案
您已經評價過!好:0 您已經評價過!不好:0 您已經評價過!原創:0 您已經評價過!非原創:0 廢人 回答採納率:36.7% 2010-04-22 21:06 滿意答案好評率:0% 首先你要弄清楚  如果是用url傳的話  url的傳遞是用編碼 ISO-8859-1  而你的編碼不是這個

所以你去到的值是亂碼,你要去轉碼就可以了

比如常用的方式

 request.getParameter("name")=new String(iso.getBytes("ISO-8859-1"),"UTF-8");

 

public static String toChi(String input) {
    try {
    //byte[] bytes = input.getBytes("ISO8859-1");

    //return new String(bytes);

        //下面兩行鍼對tomcat5。5 配置 encode為utf-8時候
        byte[] bytes = input.getBytes("UTF-8");
        return new String((new String(bytes)).getBytes("ISO-8859-1"), "gb2312");
    }catch(Exception ex) {
    }
    return null;
    }


相關文章