1. 程式人生 > >解決HttpURLConnection請求時傳中文引數亂碼問題

解決HttpURLConnection請求時傳中文引數亂碼問題

解決HttpURLConnection請求時傳中文引數亂碼

前提: 專案的編碼是utf-8, 即要保證專案下所有檔案的編碼都是utf-8
示例程式碼如下:

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setCharacterEncoding("utf-8");
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");

    String mobilePhone = request.getParameter("mobilePhone");
    String realName = request.getParameter("realName");


    realName = URLEncoder.encode(realName, "utf-8");

    String params = "method=" + method 
            + "&appId=" + appId 
            + "&sign=" + sign
            + "&timestamp=" + timestamp
            + "&mdn=" + mobilePhone
            + "&realName=" + realName;

    String returnStr = ApiUtil.getResult(Constants.CLOUD_API, params, "utf-8");
    JSONObject jo = (JSONObject) JSONObject.parse(returnStr);

    response.getWriter().print(jo);
    response.getWriter().flush();
    response.getWriter().close();

}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doGet(request, response);
}

realName可能出現中文, 我們對其進行URLEncoder編碼, ApiUtil.getResult(Constants.CLOUD_API, params, "utf-8");這裡傳遞utf-8引數

/** 
 * @param urlStr 
 *            請求的地址 
 * @param content 
 *            請求的引數 格式為:name=xxx&pwd=xxx 
 * @param encoding 
 *            伺服器端請求編碼。如GBK,UTF-8等 
 * @return 
 */  
public static String getResult(String urlStr, String content, String encoding) {  
    URL url = null;  
    HttpURLConnection connection = null;  
    try {  
        url = new URL(urlStr);  
        connection = (HttpURLConnection) url.openConnection();// 新建連線例項  
        connection.setConnectTimeout(2000);// 設定連線超時時間,單位毫秒  
        connection.setReadTimeout(2000);// 設定讀取資料超時時間,單位毫秒  
        connection.setDoOutput(true);// 是否開啟輸出流 true|false  
        connection.setDoInput(true);// 是否開啟輸入流true|false  
        connection.setRequestMethod("POST");// 提交方法POST|GET  
        connection.setUseCaches(false);// 是否快取true|false
        connection.setRequestProperty("Accept-Charset", encoding);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + encoding);
        connection.connect();// 開啟連線埠  
        DataOutputStream out = new DataOutputStream(connection  
                .getOutputStream());// 開啟輸出流往對端伺服器寫資料  
        out.writeBytes(content);// 寫資料,也就是提交你的表單 name=xxx&pwd=xxx  
        out.flush();// 重新整理  
        out.close();// 關閉輸出流  
        BufferedReader reader = new BufferedReader(new InputStreamReader(  
                connection.getInputStream(), encoding));// 往對端寫完資料對端伺服器返回資料  
        // ,以BufferedReader流來讀取  
        StringBuffer buffer = new StringBuffer();  
        String line = "";  
        while ((line = reader.readLine()) != null) {  
            buffer.append(line);  
        }  
        reader.close();  
        return buffer.toString();  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        if (connection != null) {  
            connection.disconnect();// 關閉連線  
        }  
    }  
    return null;  
}

標準的 HTTP POST 是一種 application/x-www-form-urlencoded 型別的網路表單,傳遞的引數都會被寫入請求資訊主體中。

connection.setRequestProperty("Accept-Charset", encoding);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + encoding);

相關推薦

解決HttpURLConnection請求中文引數亂碼問題

解決HttpURLConnection請求時傳中文引數亂碼 前提: 專案的編碼是utf-8, 即要保證專案下所有檔案的編碼都是utf-8 示例程式碼如下: /** * @see HttpServlet#doGet(HttpServletRequest r

IE下get方式中文引數亂碼解決方法

亂碼原因:瀏覽器在傳遞url的時候,會使用自己的編碼格式對地址進行編碼,如果瀏覽器所使用編碼與伺服器採用編碼不一致,伺服器接收到的引數就會出現亂碼。在firefox,chrome下正常,ie下會出現亂碼。 解決方法:使用js encodeURI 對地址進行統一編碼,   &n

JSP中文中文引數亂碼解決方法小結

在使用JSP的過程中,最使人頭疼的一個問題就是中文亂碼問題,以下是我在軟體開發中遇到的亂碼問題以及解決方法。   1、JSP頁面亂碼   這種亂碼的原因是應為沒有在頁面裡指定使用的字符集編碼,解決方法:只要在頁面開始地方用下面程式碼指定字符集編碼即可,   2、資料庫亂碼   這種亂碼會使你插入資料庫

h5中文引數亂碼問題

獲取url中引數函式,有可能會有中文引數,這時就需要用decodeURI解碼下  const getUrlParam = function (name) { var url = location.href; //獲取url中"?"符後的字串 if (url.inde

location.href 中文引數亂碼問題

傳中文查詢亂碼問題 則需要對要傳的引數進行二次編碼 例如  window.location.href ="reg.html?mid="+mid+"";  這樣子則會亂碼 改成 window.location.href ="reg.html?mid="+ 

解決ajax get方式提交中文引數亂碼問題

https://blog.csdn.net/memoryzxj/article/details/50715633 一般情況下, 傳送 encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue); 接收時, 直接 String

Http協議中關於請求與響應中文引數亂碼問題詳解

一、請求 表單裡的引數是字元,在資料傳輸的過程中編碼為utf-8的位元組,tomcat中預設以iso-8859-1的方式解碼,所以必須要修改解碼是查詢的碼錶: 如果是post請求,在獲取引數程式碼之

關於window.location.href 中文引數 亂碼問題

傳中文查詢亂碼問題 則需要對要傳的引數進行二次編碼 例如  window.location.href ="/xx.jsp?name="+name+"";  這樣子則會亂碼 改成 window.location.href ="/xx.jsp?name="+  encodeUR

ajax get請求中文引數亂碼解決

問題描述:使用ajax向後臺傳中文引數時出現亂碼 解決方案:   第一種方法: 由於tomcat預設的字符集是ISO-8859-1,修改Tomcat中的server.xml,在port為8080(也可以是不同的埠)的Connector中加入屬性: URIEncoding="

SpringMVC學習系列-後記 解決GET請求中文亂碼的問題

之前專案中的web.xml中的編碼設定: <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.springframework.w

java後臺解決get請求url中文引數亂碼

解決的程式碼如下 String keyword = request.getParameter("keyword"); keyword = new String(keyword.getBytes("iso-8859-1"), "utf-8"); get請求提交的引數是在位址列

struts2中文引數到action亂碼解決方法

在做專案時,由於需要表單提交時,將中文引數傳到action進行處理。雖然我的jsp與action的編碼格式都為UTF-8。但是 中文引數傳遞到action時,已然變為亂碼。於是,我找到一種決解方法。 首先,通過js將中文引數轉碼 如:var cou_year = encod

ASP.NET開發過程中遇到GET請求中文引數亂碼問題的解決辦法

直接上程式片碼 頁面請求部分 (使用 encodeURI方法轉換中文請求內容 ) : var URL = "http://localhost:8080/index.aspx?keyword=" + encodeURI($("#_keyword").val()); 後臺接

URL中文引數導致亂碼解決方案之encodeURI

[size=large]       通過URL傳中文引數時,在服務端後臺獲取到的值往往會出現亂碼。解決方案有很多種。本文介紹如何通過encodeURI來解決中文亂碼問題。 首先,在前端頁面準備引數的時候,需要對中文引數進行encode處理: var url = 'He

SpringMVC 解決GET請求中文亂碼的問題

專案中的web.xml中的編碼設定: <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.spr

JSP內建物件(包括request和response)以及解決url中文引數出現亂碼問題

一、內建物件簡介1、JSP內建物件是Web容器建立的一組物件,不使用new關鍵字就可以使用的內建物件。例如:out物件 <% int[] value={60,70,80}; for(int i:value){ out.println

中文亂碼 encodeURI來解決URL傳遞中文問題

影響 文字 ring class detail pla 解碼 http 效果 解決中文亂麻問題,頁面端發出的數據作兩次encodeURI var name="張三"; encodeURI(encodeURI(name)); 後臺解碼: URLDecoder.dec

關於springMVC中GET請求出現中文亂碼的問題

專案中的web.xml中的編碼設定為: <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.sprin

js 連結傳入中文引數亂碼解決

傳入時,可能出現中文的引數用encodeURI進行兩次轉碼,如: lethref="http://www.zzdblog.cn?keyword='+encodeURI(encodeURI(keywordCH))'";   接受時,使用decodeURI將引數進行解碼,如: l

JavaWeb解決url中中文引數亂碼以及cookie中中文亂碼問題

        今天來專門寫一篇博文記錄JavaSE中的URLEncoder類,因為已經兩次用這個類解決了自己遇到的棘手問題。第一次是之前做視訊網站的搜尋功能的時候,第二次是今天在做登入功能登入後錄入中文cookie時出現java.lang.IllegalArgumentEx