Android編程向服務(wù)器發(fā)送請(qǐng)求時(shí)出現(xiàn)中文亂碼問(wèn)題的解決方法
本文實(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)行編碼:
2、 通過(guò)IOS8859得到字符串的二進(jìn)制數(shù)據(jù),然后再通過(guò)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ì)象有相同的接口。這樣客戶端對(duì)象就可以以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。
(2) 裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的索引(reference)
(3) 裝飾對(duì)象接受所有的來(lái)自客戶端的請(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ì)給定類的功能擴(kuò)展。
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- android客戶端從服務(wù)器端獲取json數(shù)據(jù)并解析的實(shí)現(xiàn)代碼
- Android客戶端post請(qǐng)求服務(wù)器端實(shí)例
- Android編程之客戶端通過(guò)socket與服務(wù)器通信的方法
- android異步請(qǐng)求服務(wù)器數(shù)據(jù)示例
- Android解析服務(wù)器端發(fā)來(lái)的xml數(shù)據(jù)示例
- Android TCP 文件客戶端與服務(wù)器DEMO介紹
- Android使用httpPost向服務(wù)器發(fā)送請(qǐng)求的方法
- Android程序開(kāi)發(fā)通過(guò)HttpURLConnection上傳文件到服務(wù)器
- Android封裝的http請(qǐng)求實(shí)用工具類
- android實(shí)用工具類分享(獲取內(nèi)存/檢查網(wǎng)絡(luò)/屏幕高度/手機(jī)分辨率)
- Android開(kāi)發(fā)實(shí)現(xiàn)查詢遠(yuǎn)程服務(wù)器的工具類QueryUtils完整實(shí)例
相關(guān)文章
Android SeekBar實(shí)現(xiàn)禁止滑動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android SeekBar實(shí)現(xiàn)禁止滑動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
Android短信接收監(jiān)聽(tīng)、自動(dòng)回復(fù)短信操作例子
本文實(shí)現(xiàn)了短信接收監(jiān)聽(tīng),當(dāng)接收到短信時(shí),可自動(dòng)回復(fù)短信,或自動(dòng)回?fù)茈娫?,同時(shí)監(jiān)聽(tīng)短信的發(fā)送狀態(tài)2014-04-04
Android實(shí)現(xiàn)跨進(jìn)程接口回掉的方法
這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)跨進(jìn)程接口回掉的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Android 6.0權(quán)限請(qǐng)求相關(guān)及權(quán)限分組方法
今天小編就為大家分享一篇Android 6.0權(quán)限請(qǐng)求相關(guān)及權(quán)限分組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android APK使用Debug簽名重新打包 Eclipse更改默認(rèn)Debug簽名
這篇文章主要介紹了Android APK使用Debug簽名重新打包 Eclipse更改默認(rèn)Debug簽名等內(nèi)容,需要的朋友可以參考下2015-04-04
詳解Android使用Socket對(duì)大文件進(jìn)行加密傳輸
這篇文章主要介紹了詳解Android使用Socket對(duì)大文件進(jìn)行加密傳輸,使用Socket進(jìn)行文件傳輸過(guò)程時(shí),需要先進(jìn)行加密,有興趣的可以了解一下。2017-01-01
Android sdutio配置Zxing進(jìn)行掃碼功能的實(shí)現(xiàn)方法
這篇文章主要介紹了Android sdutio配置Zxing進(jìn)行掃碼功能的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-05-05

