android POST數(shù)據(jù)遇到的UTF-8編碼(亂碼)問題解決辦法
今天遇到這樣一個(gè)bug:客戶端POST到服務(wù)器的一段數(shù)據(jù)導(dǎo)致服務(wù)器端發(fā)生未知異常。服務(wù)器端確認(rèn)是編碼轉(zhuǎn)換錯(cuò)誤。于是截取網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行分析,發(fā)現(xiàn)客戶端POST的json數(shù)據(jù)中包含下面一段(hex形式):
問題就出在這個(gè)b7上。查閱Unicode代碼表后發(fā)現(xiàn),U+00b7是MIDDLE DOT,它的UTF-8表現(xiàn)形式應(yīng)該是c2 b7,但為何客戶端發(fā)送的數(shù)據(jù)中它變成了b7?
由于系統(tǒng)使用了ormlite、gson和async-http幾個(gè)庫,于是逐一排查。最后發(fā)現(xiàn)原來是向服務(wù)器發(fā)送數(shù)據(jù)時(shí)沒有指定文字編碼,導(dǎo)致async-http(實(shí)際是apache common http client)將數(shù)據(jù)以ISO-8559-1格式發(fā)送,U+00b7被編碼成b7,然后服務(wù)器試圖使用UTF-8解碼時(shí)發(fā)生錯(cuò)誤。
出錯(cuò)的代碼片段如下:
Gson gson = new Gson();
String json = gson.toJson(data);
StringEntity entity = new StringEntity(json);
httpClient.post(context, url, entity, "application/json", new TextHttpResponseHandler() ... );
第三行new StringEntity(json)時(shí)沒有指定編碼導(dǎo)致錯(cuò)誤。改正后如下:
Gson gson = new Gson();
String json = gson.toJson(data);
StringEntity entity = new StringEntity(json, "utf-8");
httpClient.post(context, url, entity, "application/json;charset=utf-8", new TextHttpResponseHandler() ... );
相關(guān)文章
Android編程實(shí)現(xiàn)ImageView圖片拋物線動(dòng)畫效果的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)ImageView圖片拋物線動(dòng)畫效果的方法,實(shí)例分析了Android實(shí)現(xiàn)拋物線運(yùn)動(dòng)的算法原理與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10Android模仿To圈兒個(gè)人資料界面層疊淡入淡出顯示效果
這篇文章主要介紹了Android模仿To圈兒個(gè)人資料界面層疊淡入淡出顯示效果的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07Flutter質(zhì)感設(shè)計(jì)之模態(tài)底部面板
這篇文章主要為大家詳細(xì)介紹了Flutter質(zhì)感設(shè)計(jì)之模態(tài)底部面板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android UI設(shè)計(jì)與開發(fā)之使用ViewPager實(shí)現(xiàn)歡迎引導(dǎo)頁面
這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開發(fā)之使用ViewPager實(shí)現(xiàn)歡迎引導(dǎo)頁面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android DragVideo實(shí)現(xiàn)播放視頻時(shí)任意拖拽的方法
這篇文章主要介紹了Android DragVideo實(shí)現(xiàn)播放視頻時(shí)任意拖拽的方法的相關(guān)資料,一種在播放視頻時(shí),能夠拖拽的方案,需要的朋友可以參考下2016-12-12Android編程實(shí)現(xiàn)圖片平鋪的方法分析
這篇文章主要介紹了Android編程實(shí)現(xiàn)圖片平鋪的方法,結(jié)合具體實(shí)例形式總結(jié)分析了Android實(shí)現(xiàn)圖片平鋪效果的三種常用操作技巧,需要的朋友可以參考下2017-06-06Android 登錄頁面的實(shí)現(xiàn)代碼(密碼顯示隱藏、EditText 圖標(biāo)切換、限制輸入長度)
這篇文章主要介紹了Android 登錄頁面的實(shí)現(xiàn)代碼(密碼顯示隱藏、EditText 圖標(biāo)切換、限制輸入長度),本文通過兩種方法給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Android?完整購物商城界面的實(shí)現(xiàn)案例
這篇文章為大家?guī)硪粋€(gè)Android?完整購物商城的界面具體的實(shí)現(xiàn),案例中含有商品列表的顯示,為商城最重要的功能之一,感興趣的朋友來看看吧2022-03-03