編輯:關於Android編程
本文實例講述了Android編程向服務器發送請求時出現中文亂碼問題的解決方法。分享給大家供大家參考,具體如下:
我們在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; } @Override public 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) 裝飾對象可以在轉發這些請求以前或以後增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現對給定類的功能擴展。
希望本文所述對大家Android程序設計有所幫助。
用了微信sdk各種痛苦,感覺比qq sdk調用麻煩多了,回調過於麻煩,還必須要在指定包名下的actvity進行回調,所以我在這裡寫一篇博客,有這個需求的朋友可以借鑒一下,
谷歌在推出Android5.0的同時推出了全新的設計Material Design,谷歌為了給我們提供更加規范的MD設計風格的控件,在2015年IO大會上推出了Desig
之前的10篇博文主要是記錄了Android4.2.2的SurfaceFlinger的相關內容,為何之前會投入那麼多的時間,原因就在於之前在看camera的架構時,遇到了本
隨著微信的到來,二維碼越來越火爆,隨處能看到二維碼,比如商城裡面,肯德基,餐廳等等,對於二維碼掃描我們使用的是google的開源框架Zxing,我們可以去http://c