1. 程式人生 > >jsp中Get提交方式的中文亂碼解決辦法

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

解決辦法:  

步驟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"
);

另外也可以自定義過濾器

 

在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");轉化編碼

推薦使用第二種方式。