【问题标题】:HttpClient - UrlEncodedFormEntity xml encode NameValuePairHttpClient - UrlEncodedFormEntity xml 编码 NameValuePair
【发布时间】:2012-06-12 05:19:23
【问题描述】:

xml 编码不正确 - 任何帮助

List<NameValuePair> formparams = new ArrayList<NameValuePair>();
            formparams.add(new BasicNameValuePair("VENDOR", "pradeep"));            
            formparams.add(new BasicNameValuePair("REQTYPE", "ExternalSystem"));
            formparams.add(new BasicNameValuePair("DATA", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");

我的输出是VENDOR=pradeep&amp;REQTYPE=ExternalSystem&amp;DATA=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E

但我预计会这样

VENDOR=D-B165&REQTYPE=EXRCTRFREQ&DATA=<?xml version=\"1.0\" encoding=\"UTF-8\"?>

以上任何一种方法

谢谢,Pradeep

【问题讨论】:

    标签: httpclient apache-httpclient-4.x


    【解决方案1】:

    看起来您的 UrlEncodedFormEntity() 调用的输出是正确的 - 它在 formparms ala Percent-encoding 中对所有 NameValuePairs 进行了 URL 编码。

    您没有提及预期输出的用例,但这将通过简单地连接不带编码的 NameValuePairs 来满足您的需求:

    StringBuilder sb = new StringBuilder();
    Iterator<NameValuePair> i = formparams.iterator();
    while( i.hasNext() )
    {
        sb.append( i.next().toString() );
        if( i.hasNext() )
            sb.append( "&" );
    }
    

    如果您仍然需要一个支持该输出的 HttpEntity,您可以尝试将 StringEntity 与以下内容一起使用:

    HttpEntity entity = new StringEntity( sb.toString() );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多