1. 程式人生 > >關於B/S模式的web服務互動過程中的中文亂碼問題淺析

關於B/S模式的web服務互動過程中的中文亂碼問題淺析

Web服務是服務端和瀏覽器之間的互動,兩者之間因為中文編碼的問題很容易導致亂碼出現。

站在服務端(servlet)角度,亂碼分成兩種接收請求(request)和響應瀏覽器(response)。

有關亂碼的問題主要是下圖中的四個元件之間的引起的。


(1)request請求產生的亂碼:

亂碼產生的大概原理:


解決思路就是:IE瀏覽器和request的編碼方式要一致。

因為request請求有兩種常見的提交方式:get和post請求,這兩種方式處理亂碼的方式也不相同。

get請求的解決方法(a標籤提交):

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

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

或者在tomcat的server.xml檔案中:

修改tomcat的配置檔案server.xml:
             <Connector URIEncoding="UTF-8" 
                 port="8080"   maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               connectionTimeout="20000" disableUploadTimeout="true" />

只需增加 URIEncoding="UTF-8"  這一句,然後重啟tomcat即可。

Post請求方式解決方法:

request.setCharacterEncoding("utf-8");

(2)response請求產生的亂碼:

亂碼產生的大概原理:


解決思路:設定response物件和瀏覽器的編碼方式一致

設定response的編碼方式:

response.setCharacterEncoding("utf-8");

設定瀏覽器的編碼方式是:

response.setHeader("content-type", "text/html;charset=utf-8");

一般經常使用(共同設定response和瀏覽器的編碼方式):

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");