亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android編程向服務(wù)器發(fā)送請(qǐng)求時(shí)出現(xiàn)中文亂碼問(wèn)題的解決方法

 更新時(shí)間:2015年11月18日 12:13:24   作者:段殘夢(mèng)  
這篇文章主要介紹了Android編程向服務(wù)器發(fā)送請(qǐng)求時(shí)出現(xiàn)中文亂碼問(wèn)題的解決方法,實(shí)例分析了Android參數(shù)傳遞過(guò)程中中文亂碼的解決技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了Android編程向服務(wù)器發(fā)送請(qǐng)求時(shí)出現(xiàn)中文亂碼問(wèn)題的解決方法。分享給大家供大家參考,具體如下:

我們?cè)赼ndorid項(xiàng)目中通過(guò)get方式向服務(wù)器發(fā)送請(qǐng)求,其中url參數(shù)帶有中文,將會(huì)產(chǎn)生亂碼,亂碼產(chǎn)生的原因有兩種:

1、 在提交參數(shù)時(shí),沒(méi)有對(duì)中文參數(shù)進(jìn)行URL編碼

2、 Tomcat服務(wù)器默認(rèn)采用的是IOS8859-1編碼(不支持中文)得到參數(shù)值

解決:

1、 進(jìn)入android項(xiàng)目,在其中要提交參數(shù)的時(shí)候,對(duì)參數(shù)的值進(jìn)行編碼:

復(fù)制代碼 代碼如下:
URLEncoder.encode(value, 編碼方式); //"UTF-8"

2、 通過(guò)IOS8859得到字符串的二進(jìn)制數(shù)據(jù),然后再通過(guò)UTF-8得到新的字符串即可。
復(fù)制代碼 代碼如下:
String title = new String(value.getBytes("ISO8859-1","UTF-8");

如果整個(gè)web項(xiàng)目中所有請(qǐng)求都要采用上面的方式來(lái)解決編碼問(wèn)題將會(huì)比較麻煩,可以采用過(guò)濾器來(lái)解決。

新建filter,設(shè)置對(duì)所有的路徑都過(guò)濾,那么URL Pattern為:/*,其中每次請(qǐng)求到來(lái)的時(shí)候都會(huì)調(diào)用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; 
 } 
}

這樣對(duì)所有的GET請(qǐng)求都能正確處理中文參數(shù)了。以上過(guò)濾器采用了裝飾模式的設(shè)計(jì),關(guān)于裝飾模式,百度如下:

(1) 裝飾對(duì)象和真實(shí)對(duì)象有相同的接口。這樣客戶(hù)端對(duì)象就可以以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。
(2) 裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的索引(reference)
(3) 裝飾對(duì)象接受所有的來(lái)自客戶(hù)端的請(qǐng)求。它把這些請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)的對(duì)象。
(4) 裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求以前或以后增加一些附加功能。這樣就確保了在運(yùn)行時(shí),不用修改給定對(duì)象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計(jì)中,通常是通過(guò)繼承來(lái)實(shí)現(xiàn)對(duì)給定類(lèi)的功能擴(kuò)展。

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論