0

我正在调用一个使用 Apache HttpClient 返回 JSON 的宁静服务。

问题是当我在不同平台上运行代码时,响应的编码会得到不同的结果。

这是我的代码:

GetMethod get = new GetMethod("http://urltomyrestservice");
get.addRequestHeader("Content-Type", "text/html; charset=UTF-8");
...
HttpResponse response = httpexecutor.execute(request, conn, context);
response.setParams(params);
httpexecutor.postProcess(response, httpproc, context);
StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer);

当我在 OSX 上运行它时,亚洲字符等返回很好,例如响应中的张惠妹。但是当我在 linux 服务器上运行它时,相同的代码将字符显示为 ???

linux 服务器是运行 Java 1.6.0_26-b03 的 Amazon EC2 实例 我的本地 OSX 正在运行 1.6.0_29-b11

任何想法都非常感谢!!!!

4

2 回答 2

1

如果您查看以下的 javadoc org.apache.commons.io.IOUtils.copy(InputStream, Writer)

使用平台的默认字符编码将字节从 InputStream 复制到 Writer 上的字符。

所以这将根据客户给出不同的答案(这就是你所看到的)

此外,Content-Type通常是响应标头(除非您使用 POST 或 PUT)。Accept-Charset服务器可能会忽略它(尽管您可能对请求标头有更多的运气)。

您需要解析响应标头的内容类型的 charset-encoding 参数,并使用它将响应转换为 a String(如果它是String您真正想要的)。我希望 Commons HTTP 有代码可以自动为你做这件事。如果没有,SpringRESTTemplate肯定会。

于 2012-06-12T12:50:24.460 回答
0

我相信问题不在于 HTTP 编码,而在于其他地方(例如,在阅读或形成答案时)。您从哪里获取内容以及如何获取内容?这是存储在数据库还是文件中?

于 2012-06-12T12:37:44.017 回答