servlet和apache HttpClient的UTF-8编码问题

时间:2010-12-14 22:08:21

标签: java apache servlets utf-8 httpclient

我有一个servlet,它发送一个utf-8编码的字符串。我也有一个用apache httpcomponents库编写的客户端。

我的问题是在utf-8中阅读回复。某些特殊字符(如ñ或ç)无法正确读取。如果我用发送请求的html页面测试服务器,则字符串是正确的,编码是UTF-8而没有BOM。

一些片段: 的的Servlet

response.setContentType ("application/json; charset=UTF-8");
PrintWriter out = response.getWriter ();
out.write (string);

客户端

entity = response.getEntity ();
entity.getContentEncoding (); //returns null
resultado = EntityUtils.toString (entity, HTTP.UTF_8); //Some characters are wrong

有没有人遇到同样的问题?

解决: 对不起,客户端和服务器工作正常。我正在写一个Android应用程序,似乎logcat(我打印消息的地方)不支持utf-8编码。

4 个答案:

答案 0 :(得分:7)

你试过吗

response.setCharacterEncoding("utf-8");

而不是通过setContentType设置编码?它根据文档不应该有所作为,但谁知道......

另外,在设置字符编码之前,请确保没有在代码中的任何位置调用response.getWriter(),因为后者在这种情况下不会产生任何影响。

答案 1 :(得分:3)

确保流字节采用UTF-8格式:

out.write((yourstring.getBytes("UTF-8"));

答案 2 :(得分:1)

StandardCharsets.UTF_8可与EntityUtil一起使用以获得正确的编码。

以下是一个示例代码段:

HttpEntity entity = response.getEntity();
String webpage = EntityUtils.toString(entity, StandardCharsets.UTF_8);

答案 3 :(得分:0)

我有一个类似的问题,可以通过使用UTF-8编码来解决,如下所示:

IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8)

命名空间:

import com.google.common.base.Charsets;