You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by Oleg Kalnichevski <ol...@apache.org> on 2004/03/14 16:17:58 UTC

Re: i was troubled when using chinese at request body

Hi there

Firstly, one part of the problem is that you do not URL encode your
query parameters

This is not sufficient

GetMethod get = new GetMethod("http://url/?text="+s);

Please do the following instead:

GetMethod get = new GetMethod("http://url/");
NameValuePair[] params = new NameValuePair[] {
	new NameValuePair("text", s)
};
get.setQueryString(EncodingUtil.formUrlEncode(params, "gb2312"));

Secondly, my guess it that the web server does not include the charset
in the content-type header, which causes getResponseCharSet method to
return the default charset (iso-8859-1) instead of expected gb2312

See the following document for more details:
<http://jakarta.apache.org/commons/httpclient/charencodings.html>

To verify this assumption you may activate and examine the wire log:
<http://jakarta.apache.org/commons/httpclient/logging.html>

To mend the problem you can simply retrieve the raw response body as
array of bytes and perform the character translation manually with the
desired charset

String responseBody = null;
byte[] rawdata = get.getResponseBody();
if (rawdata != null) {
  responseBody = HttpConstants.getContentString(rawdata, "gb2312");
}

Hope this helps

Oleg



On Sun, 2004-03-14 at 14:46, yl d wrote:
> hi,
> i am using apache http client lib to get rusult from
> my jsp webpage.
> the jsp page get a request like:text=....,and return a
> result and show it on web.
> when i enter a request like
> :http://localhost/a.jsp?text=...(here is some chinese
> words) at IE6.0,at the jsp file,i get the request
> string ,and i use 
> this.userRequest = new
> String(this.userRequest.getBytes("8859_1"), "gb2312")
> to get the chinese string.(gb2312 is a kind of chinese
> encoding)
> i succeed.
> 
> but when i can use apache http client:
> String s="...";(here is some chinese words)
> HttpClient httpClient = new HttpClient();
> GetMethod get = new GetMethod("http://url/?text="+s);
> int responseCode = httpClient.executeMethod(get);
> String responseBody = get.getResponseBodyAsString();
> System.out.print( responseBody);
> 
> i look in the jsp file,it can't print the right
> chinese words.(though i have used  new
> String(this.userRequest.getBytes("8859_1"), "gb2312")
> in the jsp file.) 
> 
> i don't know what is the reason and how to do.
> i look up in the mail list archive,and i can't find
> the answer(someone seems meet the same problem,he use
> big5).
> can anyone help me?thanks...
> sorry for my poor english. 
> 
> 
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - More reliable, more storage, less spam
> http://mail.yahoo.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org