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

Gab*_*mas 5 java apache servlets httpclient utf-8

我有一个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);
Run Code Online (Sandbox Code Playgroud)

客户

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

有没有人有同样的问题?

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

Tho*_*mas 7

你有没有尝试过

response.setCharacterEncoding("utf-8");
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

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

这是一个示例片段:

HttpEntity entity = response.getEntity();
String webpage = EntityUtils.toString(entity, StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)


小智 5

确保流字节为UTF-8格式:

out.write((yourstring.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)