一、提交中文是使用javascript的函數:encodeURIComponent()進行編碼,
例如:
String
然后到服務器端使用UTF-8編碼提取參數:
request.setCharacterEncoding("UTF-8");
String str = request.getParameter("param");
然后使用下面的方式進行解碼:
java.net.URLDecoder.decode(str,"UTF-8")
這樣就可以得到正確的參數。
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
29 | 30 | 1 | 2 | 3 | 4 | 5 | |||
6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
27 | 28 | 29 | 30 | 31 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
tomcat5中,因為眾所周知的原因,為了保證get/post數據都采用相同的UTF8編碼,我們在server.xml中進行了如下設置:
acceptCount="100" debug="99" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>
這里指定了get時候的數據編碼。但是,當使用IIS作為webserver轉發servlet/jsp請求給Tomcat時候,這個設置卻失效了。其實原因很簡單:IIS是通過AJP協議,把請求轉發到Tomcat監聽的8009端口上的,所以這里針對8080的設置自然就無效了。正確的方法是進行下面的設置:
雖然是小問題,卻花了我幾個小時才想到。
一、請求結果的亂碼:
解決辦法:在顯示中文字符串前加上 request.setCharacterEncoding("gbk");
或者:在獲取字符串str后使用str = new String(str.getBytes("ISO-8859-1"),"GB2312");轉換
ISO-8859-1是默認的字符編碼
解決辦法:
1、項目已打包到web服務器:
找到 %TOMCAT_HOME%\conf\server.xml文件,將此文件的代碼段末尾加 入 URIEncoding="gbk",結果如下所示:
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gbk"/>
2、開發過程中:
找到 %project_name%\Tomcat\conf\server.xml文件,刪除文件中的備注,增加URIEncoding="gbk",結果如下所示:
<Connector acceptCount="10" connectionTimeout="60000" maxThreads="75" minSpareThreads="5" port="8080" URIEncoding="gbk"/>
二、處理響應結果的亂碼..
1.在servlet中 response.setContentType("text/html;charset=GB2312");
2.在jsp中 <%@page contentType="text/html;charset=GB2312"%>
3.在html中 <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=GB2312"></head>
一、提交中文是使用javascript的函數:encodeURIComponent()進行編碼,
例如:
String
在JSP的查詢或者插入數據庫的時候總會遇到亂碼的問題,下面給出兩種解決方案:
1、在頁面中加上 request.setCharacterEncoding("utf-8");
2、String name=new String(request.getparameters("name").getBytes("ISO8859_1"),"utf-8")