編碼已經設置為utf-8,spring也加了過濾器進行utf-8的解碼...而且控制臺也的確打印出沒有亂碼的發送信息..想當然的認為這頭一定沒問題..
然后只好寫個測試代碼從獲得數據的那頭獲取:
entity = new StringEntity(doc.asXML());post.setEntity(entity);HttpResponse response = client.execute(post);String result = EntityUtils.toString(response.getEntity());System.out.println("結果:"+result);結果得到的就是亂碼,如果接收方代碼如下改則不會亂碼:
String result = EntityUtils.toString(response.getEntity(),"gbk");
證明亂碼部分發過來的是gbk的..我的確是有點蒙了,下午被sae的坑人環境坑了大半天腦袋早木了..又細想了一下既然發過來是亂碼,編碼的時候又是正常的,那也只可能是getBytes()這一處能出問題了,也只有這一處動過編碼后的字符串..看看api說明吧:
Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.
我倒了..這才恍然大悟,我本地是windows系統,默認是gbk,所以此處會將那部分中文按照gbk編碼然后傳過去,因為我們response.setXX("utf-8")了,所以接收方按照utf-8來解碼,直接亂碼..
所以我們應該改成:
response.setCharacterEncoding("utf-8");response.getOutputStream().write(result.getBytes("utf-8"));則接收方無需做任何處理便可得到沒有亂碼的中文..