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

Java servlet和apache HttpClient的UTF-8编码问题,java,apache,servlets,utf-8,httpclient,Java,Apache,Servlets,Utf 8,Httpclient,我有一个servlet,它发送一个utf-8编码的字符串。我还有一个用ApacheHttpComponents库编写的客户端 我的问题是读取utf-8中的响应。一些特殊字符,如ñorç,没有正确读取。如果我用发送请求的html页面测试服务器,则字符串是正确的,编码是UTF-8,没有BOM 一些片段: Servlet response.setContentType ("application/json; charset=UTF-8"); PrintWriter out = response.get

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

我的问题是读取utf-8中的响应。一些特殊字符,如ñorç,没有正确读取。如果我用发送请求的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
客户端

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编码。

你试过了吗

response.setCharacterEncoding("utf-8");
而不是通过
setContentType
设置编码?根据文档,这不会有什么不同,但谁知道呢


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

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

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

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

以下是一个示例片段:

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

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

IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8)
名称空间:

import com.google.common.base.Charsets;

你能确定问题是在servlet端还是在客户端吗?是的,你应该用Wireshark之类的东西检查一下。我还测试了与Wireshark的连接,我发现特殊字符发送错误,但是firefox正确地显示了这一点:S.使用setCharacterEncoding和文本/普通内容类型进行了测试,但仍然失败。您是对的,在使用字符集信息设置contentType之后添加或不添加响应没有任何区别。但是当我改变调用response.getWriter()的位置时,它立即工作得很好。非常感谢。