我遇到了一個很奇怪的現象,明明在http發送請求的時候設置了編碼格式爲utf-8,可是到了server端,就出現了部分亂碼,大部分時候都是其中的一箇中文漢字亂碼,僅僅是一個漢字亂碼,client端代碼:java
public JSONObject executeRequest(String jsonObject,String url) { StringEntity entity; JSONObject respJson = null; try { entity = new StringEntity(jsonObject, "UTF-8"); entity.setContentType("application/json");//必定要設置爲json,這是必須的 HttpPost post = new HttpPost(url); post.setEntity(entity); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = response.getEntity(); String message = EntityUtils.toString(httpEntity, "UTF-8"); respJson = JSONObject.parseObject(message); } else { logger.error("請求失敗!錯誤碼:" + response.getStatusLine().getStatusCode() + " 失敗信息:" + response.getStatusLine().getReasonPhrase()); } } catch (Exception e) { logger.error("請求失敗:" + e); } return respJson; }
public JSONObject executeRequest(JSONObject jsonObject,String url) { StringEntity entity; JSONObject respJson = null; try { entity = new StringEntity(jsonObject.toJSONString(), "UTF-8"); entity.setContentType("application/json");//必定要設置爲json,這是必須的 HttpPost post = new HttpPost(url); post.setEntity(entity); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = response.getEntity(); String message = EntityUtils.toString(httpEntity, "UTF-8"); respJson = JSONObject.parseObject(message); } else { logger.error("請求失敗!錯誤碼:" + response.getStatusLine().getStatusCode() + " 失敗信息:" + response.getStatusLine().getReasonPhrase()); } } catch (Exception e) { logger.error("請求失敗:" + e); } return respJson; }
後來分析是這樣的,我這邊封裝了一個java對象,該對象是json結構,有setter和getter,好比說我封裝的java對象是Person,包含name,addr,age,salary,phone等屬性,我發送對象的時候我將java對象轉換成了JSONObject,而後將JSONObject變爲entity對象給發出去了(爲何要費勁轉一下?由於業務須要增長該對象沒有的屬性,否則我也不會這麼轉換),到了server端就出現了少許漢字亂碼,json
因此我理解:app
對象之間屢次轉換會增長中文亂碼的機率post