jsp中Get提交方式的中文亂碼解決辦法__js

來源:互聯網
上載者:User

解決辦法:  

步驟1.  加過濾器,即在filter裡的init()裡加上request.setCharacterEncoding("utf-8");相當於每個頁面的編碼都是utf-8,

步驟2.  將表單提交方法改成post方式,至於get方式的解決目前還不知道

上面兩個步驟保證了資料在提交給背景過程中不亂碼

步驟3.  資料庫裡面需要中文的欄位的類型都改成nvarchar,保證資料寫入資料庫的時候不亂碼

最後,在頁面的<%@ page contentType="text/html;charset=utf-8" language="java"%>charset=utf-8"寫成utf-8保證在輸出的時候編碼為utf-8

 

下面的網上的一些說法:

 

 

 其實這是個很普遍的問題,網上也有很多的文章去全面的解釋jsp中文亂碼的問題。在這裡我只是想說一下get方式提交表單時的中文亂碼解決方案。

     現在做系統的時候,為瞭解決中文的亂碼問題,我們通常會配置一個編碼過濾器,比如我們直接用Spring給我們提供的編碼過濾器

    <!-- 編碼過濾器 -->
<filter>
   <filter-name>Spring character encoding filter</filter-name>
   <filter-class>
    org.springframework.web.filter.CharacterEncodingFilter
   </filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>gb2312</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>Spring character encoding filter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

這段配置就相當於在代碼中寫了如下代碼:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

 

另外也可以自訂過濾器

 1 建立ChineseFilter類。 package spell; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ChineseFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; //Handle the passed-in FilterConfig public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } //Process the request/response pair public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try { String encoding=filterConfig.getInitParameter("encoding");//從WEB.xml設定檔中取出參數,這樣我們可以通過配置修改編碼格式. request.setCharacterEncoding(encoding);//佈建要求的編碼格式 filterChain.doFilter(request, response); } catch (ServletException sx) { filterConfig.getServletContext().log(sx.getMessage()); } catch (IOException iox) { filterConfig.getServletContext().log(iox.getMessage()); } } //Clean up resources public void destroy() { } protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(arg0, arg1); } protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub super.doPost(arg0, arg1); } } 2 web.xml配置(注意:jsp/servlet2.3以上版本才支援filter,所以前面應該改為<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">) <filter> <filter-name>ChineseFilter</filter-name> <filter-class>spell.ChineseFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>ChineseFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

 

 

在jsp頁面中,設定頁面的儲存編碼和頁面輸出時的編碼:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

這樣,就統一了編碼為utf-8。

這種方式在post提交表單中含有中文時沒有問題。但是在用get提交時,如果含有中文,就會出現類似於“。 。 。”的亂碼問題。為什麼會這樣呢,造成這種現象的原因是Tomcat對get和post兩種提交方式的處理方法不一樣造成的。自從Tomcat5.x開始,GET和POST方法提交的資訊,Tomcat採用了不同的方式來處理編碼,對於POST請求,Tomcat會仍然使用request.setCharacterEncoding方法所設定的編碼來處理,如果未設定,則使用預設的iso-8859-1編碼。而GET請求則不同,Tomcat對於GET請求並不會考慮使用request.setCharacterEncoding方法設定的編碼,而會永遠使用iso-8859-1編碼。

解決辦法如下:

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.使用String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");轉化編碼

推薦使用第二種方式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.