1. 程式人生 > >關於在瀏覽器中輸入URl地址中含有中文的解決(亂碼)

關於在瀏覽器中輸入URl地址中含有中文的解決(亂碼)

    亂碼解決: 前端時間在做專案的時候發現在位址列裡輸入Url中有中文會有亂碼,綜合分析了幾個問題,1、首先確定使用的tomcat的編碼是否改動過tomcat中的編碼,或者程式碼中的編碼方式是否轉換錯誤(跟實際的是否一致)2、資料庫的編碼是否跟自己設定的編碼方式一樣,否則也會出現亂碼,(我為了省事,所以都用的是UTF-8的編碼方式)

        在get的請求方式的時候:由於在預設情況下,Tomcat對請求採用的預設編碼是ISO-8859-1, 這樣我們提交的漢字被認為是ISO-8859-1的編碼,所以在程式中接收時顯示亂碼   在過濾器中呼叫request.setCharacterEncoding("使用哪種編碼就是哪種編碼"),(來設定編碼)那麼Post上來的漢字將被認為是此種方式編碼,

而Tomcat對於Get請求上來的編碼並不根據過濾器的設定辨認編碼方式,預設的依然是ISO-8859-1

所以,即使你的頁面使用預設的編碼方式進行編碼,然後使用ISO-8859-1進行解碼,得到的結果也不對 。 

解決方法: (由於剛開始不想更改tomcat中的編碼方式,尋求一種可以在程式碼端可以控制的方式,但是最後經過測試,卻沒有解決,之後全部編碼都是使用的UTF-8,並且在tomcat中改變了預設的編碼方式,更改為了UTF-8)
在TOMCAT中的conf/server.xml中的<Connector中新增兩個設定
useBodyEncodingForURI="true" //設定POST和GET使用相同編碼
URIEncoding="UTF-8" //對URI使用utf-8編碼處理

同時在程式碼中的用String提供的編碼轉化測試,請求的引數值:

TextContent = new String(TextContent.getBytes("utf-8"),"UTF-8").trim();
//String TextContent = new String(request.getParameter("textcontent").getBytes(
//"utf-8"), "GBK");//在專案中如果不進行配置tomcat的編碼,tomcat預設的編碼應該是ISO-8859-1
//上述語句中的前面的編碼是伺服器的編碼 後者是客戶端的編碼,如果想在服務端用UTF-8的話需要在tomcat的server.XML裡面設定一下

// 設定這兩句URIEncoding="UTF-8" useBodyEncodingForURI="true"設定tomcat中的編碼方式,不過使用此種方式有很大的弊端的,在做其他的專案的時候同樣需要更改的

所以現在我就是用的全部的UTF-8的編碼方式,由於在post方法還有具體的測試就不寫了;