http 傳輸中出現部分中文亂碼

我遇到了一個很奇怪的現象,明明在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

相關文章
相關標籤/搜索