nighty

          折騰的年華
          posts - 37, comments - 143, trackbacks - 0, articles - 0
              最近一個(gè)程序出了點(diǎn)問(wèn)題,對(duì)于中文參數(shù)的GET請(qǐng)求,服務(wù)器無(wú)法解析出正確的參數(shù)。剛好服務(wù)器的那端是另一個(gè)項(xiàng)目組負(fù)責(zé),是異構(gòu)系統(tǒng),當(dāng)初測(cè)試的時(shí)候也是走流程化,涉及到很多工作上的協(xié)調(diào)就比較麻煩,測(cè)試也不充分,像趕鴨子上架一樣就上線了,催說(shuō)是項(xiàng)目緊急。當(dāng)然這是話外,不多廢話。
              httpClient的GetMethod類(lèi)加入?yún)?shù)的方法是如下:
          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定義的一個(gè)編碼工具類(lèi),由于默認(rèn)設(shè)置的是UTF-8,所以對(duì)于一些系統(tǒng)可能就無(wú)法識(shí)別。可以在外部這樣更改:
          method.setQueryString(EncodingUtil.formUrlEncode(pair, "GB2312"));另外,注意請(qǐng)求頭也要修改為對(duì)應(yīng)的一致編碼方式,method.addRequestHeader("Content-type" , "text/html; charset=GB2312");如果這二個(gè)編碼不一致,就會(huì)引起亂碼。
             剛開(kāi)始的時(shí)候嘗試過(guò)都使用一致的UTF-8,但是發(fā)現(xiàn)還是亂碼,這應(yīng)該是服務(wù)器的原因。IE默認(rèn)的就是采用操作系統(tǒng)Windows的中文編碼去進(jìn)行Encoder的,服務(wù)器原先基本上都為IE服務(wù)的,所以改為GB2312就能正常識(shí)別得到。
             另外,上面提到的EncodingUtil這個(gè)工具是從apache的另一個(gè)組件codec包裝而來(lái)的,而非SUN的URLEncoder。有興趣的可以研讀一下源代碼。

          剛進(jìn)場(chǎng)的時(shí)候戲就落幕

          Feedback

          # re: httpClient3.1中文參數(shù)GET請(qǐng)求的解決方法  回復(fù)  更多評(píng)論   

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

          # re: httpClient3.1中文參數(shù)GET請(qǐng)求的解決方法[未登錄](méi)  回復(fù)  更多評(píng)論   

          2009-06-07 23:59 by wangyazhen
          寫(xiě)的 ,謝謝這位大哥,想問(wèn)下你怎么會(huì)找到EncodingUtil這個(gè)類(lèi)呢?很感興趣!
          主站蜘蛛池模板: 顺平县| 西贡区| 格尔木市| 镶黄旗| 上犹县| 金川县| 武山县| 武陟县| 姚安县| 育儿| 洪洞县| 公安县| 新宁县| 漳平市| 邵东县| 吴川市| 高邑县| 左贡县| 博罗县| 车致| 九龙城区| 巫山县| 伊宁市| 万源市| 四平市| 北辰区| 石棉县| 鸡泽县| 云梦县| 尉犁县| 安吉县| 景洪市| 来凤县| 镇宁| 江西省| 棋牌| 阿克| 尼木县| 河间市| 马公市| 永登县|