On Thu, 2012-01-12 at 14:15 +0100, Joan Balaguero wrote:
> Hello Oleg,
>
>
>
> Im having an strange issue with encoding using HttpClient 4.0.1.
>
>
>
> Im sending a string to a servlet using HttpClient 4.0.1. The servlet just
> sends back to the client exactly the same received string:
>
>
>
> This is the piece of code that sends the string to the servlet and receives
> the response:
>
>
>
> ( . . . )
>
>
>
> String ENCODING = ISO-8859-1;
>
> String str = "ÑÑÑ_ÁÁÁ";
>
>
>
> objPost = new HttpPost(url);
>
>
>
> StringEntity strEntity = new StringEntity(str);
>
This constructor assumes default charset encoding for HTTP content which
is ISO-8859-1.
> strEntity.setContentType("text/plain; charset=" + ENCODING);
>
This basically causes the content to be decoded incorrectly as long as
ENCODING is not ISO-8859-1.
Oleg
> objPost.setEntity(strEntity);
>
>
>
> HttpEntity entity = null;
>
>
>
> try
>
> {
>
> entity = objHttp.execute(objPost).getEntity();
>
>
>
> // Read the response.
>
> BufferedInputStream bis = new BufferedInputStream(entity.getContent());
>
> ByteArrayOutputStream bos = new ByteArrayOutputStream();
>
> byte[] buffer = new byte[4098];
>
> int numBytes;
>
>
>
> while ((numBytes = bis.read(buffer)) >= 0) bos.write(buffer, 0, numBytes);
>
>
>
> System.out.println("RESPONSE = " + new String(bos.toString(ENCODING));
>
>
>
> ( . . . )
>
>
>
>
>
> And this is the piece of code of the servlet that prints the request
> inputstream directly to the response outputstream:
>
>
>
> ( . . . )
>
>
>
> BufferedOutputStream bos = null;
>
>
>
> try
>
> {
>
> response.setContentType(request.getContentType());
>
>
>
> bos = new
> BufferedOutputStream(response.getOutputStream());
>
> InputStream in = request.getInputStream();
>
> byte[] tmp = new byte[4098];
>
> int numBytesRead = 0;
>
> while ((numBytesRead = in.read(tmp, 0, 4098)) >= 0) bos.write(tmp, 0,
> numBytesRead);
>
>
>
> ( . . . )
>
>
>
>
>
> If the ENCODING variable is ISO-8859-1, the response is received OK:
>
> RESPONSE = ÑÑÑ_ÁÁÁ
>
>
>
> But if the ENCODING variable is UTF-8, the response is received KO:
>
> RESPONSE = "???_???"
>
> In this case, if I force an iso decoding in the line:
>
> System.out.println("RESPONSE = " + new String(bos.toString(ISO-8859-1));
>
> Then it works: RESPONSE = ÑÑÑ_ÁÁÁ
>
>
>
>
>
> Could be an issue in StringEntity? Or maybe Im missing anything?
>
>
>
> Thanks in advance,
>
>
>
> Joan.
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]