Tomcat中文編碼

來源:互聯網
上載者:User

本來以為把jsp版面設定為UTF-8,伺服器端用filter把request和response設定為utf-8,中文問題應該就差不多了。

但tomcat似乎中間給我我們加了步驟。

1 頁面

頁面中設定的編碼,我們post的資料就會按照頁面的編碼進行 encode,

比如 我們要post資料為 site=部落格園,如果我們的頁面為utf-8格式,

則實際post的資料為 site=%E5%8D%9A%E5%AE%A2%E5%9B%AD

java:URLEncoder.encode("部落格園", "utf-8"),

所以我們post給伺服器的資料會先經過頁面編碼的encode。

2 tomcat伺服器

當我們直接 request.getParameter(“site”);發現得到的字串為“?????????”,

因為tomcat自作聰明的把的字串當成iso8859-1來解碼了,

tomcat執行了類似:URLDecoder.decode(str, "iso8859-1");,因為jsp頁面預設的編碼就是iso8859-1,

就算你改了myeclipse的jsp頁面預設編碼,但tomcat的還是iso8859-1。

3 servlet

我們的servlet如何得到中文編碼呢?我們一步一步的加碼解碼即可:

URLEncoder.encode(str, "iso8859-1");//把tomcat給我們解碼的字串給加碼上

URLDecoder.decode(str, "utf-8");//把瀏覽器給我們加碼的資料解碼

 

總體過程:

//頁面 pageEncoding=utf-8String str = "部落格園";str = URLEncoder.encode(str, "utf-8");System.out.println(str);//output:%E5%8D%9A%E5%AE%A2%E5%9B%AD//tomcat str = URLDecoder.decode(str, "iso8859-1");System.out.println(str);//output:?????????// servletstr = URLEncoder.encode(str, "iso8859-1");System.out.println(str);//%E5%8D%9A%E5%AE%A2%E5%9B%ADstr = URLDecoder.decode(str, "utf-8");System.out.println(str);//部落格園

 

知道了tomcat加碼解碼過程,我們就可以徹底設定解碼方式了。

如果是get方式傳資料,可以設定解碼方式,

在tomcat的server.xml中 connector加上解碼方式:

    <Connector port="8000" protocol="HTTP/1.1" URIEncoding="UTF-8"               connectionTimeout="20000"                redirectPort="8443" />

post還是使用filter + 手動解碼吧!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.