nighty

          折騰的年華
          posts - 37, comments - 143, trackbacks - 0, articles - 0

          httpClient3.1中文參數GET請求的解決方法

          Posted on 2008-07-16 10:31 寒武紀 閱讀(5216) 評論(2)  編輯  收藏 所屬分類: Java
              最近一個程序出了點問題,對于中文參數的GET請求,服務器無法解析出正確的參數。剛好服務器的那端是另一個項目組負責,是異構系統,當初測試的時候也是走流程化,涉及到很多工作上的協調就比較麻煩,測試也不充分,像趕鴨子上架一樣就上線了,催說是項目緊急。當然這是話外,不多廢話。
              httpClient的GetMethod類加入參數的方法是如下:
          void setQueryString(NameValuePair[] params)
                    Sets the query string of this HTTP method.
           void setQueryString(String queryString)
             跟蹤一下httpClient的GetMethod的源代碼,繼承自HttpMethodBase,源碼如下:
            
          public void setQueryString(String queryString) {
             
          this.queryString = queryString;
          }

              
          public void setQueryString(NameValuePair[] params) {
             LOG.trace(
          "enter HttpMethodBase.setQueryString(NameValuePair[])");
             queryString 
          = EncodingUtil.formUrlEncode(params, "UTF-8");
          }
             EncodingUtil是httpClient定義的一個編碼工具類,由于默認設置的是UTF-8,所以對于一些系統可能就無法識別。可以在外部這樣更改:
          method.setQueryString(EncodingUtil.formUrlEncode(pair, "GB2312"));另外,注意請求頭也要修改為對應的一致編碼方式,method.addRequestHeader("Content-type" , "text/html; charset=GB2312");如果這二個編碼不一致,就會引起亂碼。
             剛開始的時候嘗試過都使用一致的UTF-8,但是發現還是亂碼,這應該是服務器的原因。IE默認的就是采用操作系統Windows的中文編碼去進行Encoder的,服務器原先基本上都為IE服務的,所以改為GB2312就能正常識別得到。
             另外,上面提到的EncodingUtil這個工具是從apache的另一個組件codec包裝而來的,而非SUN的URLEncoder。有興趣的可以研讀一下源代碼。

          剛進場的時候戲就落幕

          Feedback

          # re: httpClient3.1中文參數GET請求的解決方法  回復  更多評論   

          2008-07-16 14:21 by po
          ms你的httpclient有些老。。我看到的是可以指定編碼的httpclient

          # re: httpClient3.1中文參數GET請求的解決方法[未登錄]  回復  更多評論   

          2009-06-07 23:59 by wangyazhen
          寫的 ,謝謝這位大哥,想問下你怎么會找到EncodingUtil這個類呢?很感興趣!
          主站蜘蛛池模板: 治县。| 教育| 珠海市| 郸城县| 桂林市| 临沭县| 景宁| 化州市| 甘孜| 宜丰县| 上犹县| 谢通门县| 保德县| 霍林郭勒市| 鹤峰县| 寿宁县| 通化市| 基隆市| 巴南区| 西平县| 嘉定区| 黄龙县| 岳阳县| 凤台县| 卓尼县| 武隆县| 萝北县| 庄浪县| 枝江市| 收藏| 莆田市| 道孚县| 屏东市| 丹东市| 邵东县| 轮台县| 江山市| 永定县| 应城市| 广德县| 奉新县|