HttpUrlConnection流傳輸問題(正確傳輸包含中文的JSON字符串)

目前在寫一個功能,主要是使用 HttpURLConnection 發送http請求調用外部接口。原本一切正常的,但是在發送post請求上傳數據給服務端時,服務端返回錯誤信息:獲取的JSON請求是亂碼的。java

由於請求的JSON裏面包含了中文,因此一開始我把思路鎖定在了編碼問題,這樣就走進了死衚衕。在把tomcat、JDK、請求頭的header中的Content-Type全都排查了一遍後,確認都是utf-8編碼呀,爲何還會出現亂碼?在百度上一頓猛搜,都是各類教你改http請求頭的,或者以下數組

        DataOutputStream out = null;
   
        out = new DataOutputStream(connection.getOutputStream());

        //out.writeBytes(content);       out.write(content.getBytes());

out.writeBytes(content) 換成 out.write(content.getBytes()),由於java裏的char類型是16位(2個字節)的,一個char能夠存儲一箇中文字符,在將其轉換爲byte後高8位會丟失,這樣就沒法將中文字符串完整的輸出到字節輸出流中。因此在可能有中文字符輸出的地方最好先將字符串轉換爲字節數組,而後再經過write寫入字節輸出流。tomcat

but,這種方法只對有的人的問題生效,沒有解決個人問題。post

直到我看到了這篇博客https://blog.csdn.net/hwj3747/article/details/53635539編碼

        PrintWriter out = null;

        out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));    
        
out.println(content);

思路是用字符流代替字節流進行傳輸,由於咱們傳入的JSON字符串是純字符。這樣就完美避開了用字節流傳輸包含中文的字符串可能存在的各類轉化問題。spa

 

總結:由於長期在寫業務代碼,因此對Java底層流機制很是生疏了。.net

相關文章
相關標籤/搜索