Android學習筆記:Android向伺服器發送請求時的中文亂碼問題

來源:互聯網
上載者:User

我們在andorid項目中通過get方式向伺服器發送請求,其中url參數帶有中文,將會產生亂碼,亂碼產生的原因有兩種:

1、 
在提交參數時,沒有對中文參數進行URL編碼

2、 
Tomcat伺服器預設採用的是IOS8859-1編碼(不支援中文)得到參數值

 

解決:

1、 
進入android項目,在其中要提交參數的時候,對參數的值進行編碼:

URLEncoder.encode(value, 編碼方式);              //”UTF-8”

2、  通過IOS8859得到字串的位元據,然後再通過UTF-8得到新的字串即可。

String title = new String(value.getBytes(“ISO8859-1”,”UTF-8”);

 

如果整個web項目中所有請求都要採用上面的方式來解決編碼問題將會比較麻煩,可以採用過濾器來解決。

建立filter,設定對所有的路徑都過濾,那麼URL Pattern為:/*,其中每次請求到來的時候都會調用doFilter方法,具體的代碼如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;if("GET".equals(req.getMethod())){EncodingRequestWrapper wrapper = new EncodingRequestWrapper(req);chain.doFilter(wrapper, response);}else{req.setCharacterEncoding("UTF-8");chain.doFilter(request, response);}}

其中 EncodingRequestWrapper代碼:

public class EncodingRequestWrapper extends HttpServletRequestWrapper {private HttpServletRequest request;public EncodingRequestWrapper(HttpServletRequest request) {super(request);this.request = request;}@Overridepublic String getParameter(String name) {String value = request.getParameter(name);if(value!=null){try {value = new String(value.getBytes("ISO8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return value;}}

這樣對所有的GET請求都能正確處理中文參數了。以上過濾器採用了裝飾模式的設計,關於裝飾模式,百度如下:

        (1) 裝飾對象和真實對象有相同的介面。這樣用戶端對象就可以以和真實對象相同的方式和裝飾對象互動。

  (2) 裝飾對象包含一個真實對象的索引(reference)

  (3) 裝飾對象接受所有的來自用戶端的請求。它把這些請求轉寄給真實的對象。

  (4) 裝飾對象可以在轉寄這些請求以前或以後增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在物件導向的設計中,通常是通過繼承來實現對給定類的功能擴充。

相關文章

聯繫我們

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