Jersey 客户端响应字符串编码

Jersey client response string encoding

我正在使用 jersey 客户端向网络服务发出请求。

Client client = ClientBuilder.newClient(new ClientConfig());
Invocation.Builder builder = client.target("http://someurl.com").request();
String result = builder.get(String.class);

然后我得到了回应

<?xml version="1.0" encoding="ISO-8859-1" ?>
<DATA>some data with é è à characters</DATA>

但在我的字符串结果中,响应看起来像那样

<?xml version="1.0" encoding="ISO-8859-1" ?>
<DATA>some data with � � � characters</DATA>

如何告诉 jersey 正确解码网络服务响应?

我暂时找到了解决方法

Client client = ClientBuilder.newClient(new ClientConfig());
Invocation.Builder builder = client.target("http://someurl.com").request();
Response response = builder.get();
String result = CharStreams.toString(new InputStreamReader((InputStream) response.getEntity(), Charsets.ISO_8859_1));

CharStreams 是 Guava class 但还有其他方法可以将 InputStream 转换为 String 并使用 Charset.

感谢 Wizbot,我今天遇到了完全相同的问题。

我想 post 我的 java 8 解决方案没有 Guava 依赖:

Client client = ClientBuilder.newClient(new ClientConfig());
Invocation.Builder builder = client.target("http://someurl.com").request();
Response response = builder.get();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader((InputStream) response.getEntity(), StandardCharsets.ISO_8859_1));
String result = bufferedReader.lines().collect(Collectors.joining(""));