HttpClient忽略编码,在一台计算机上

Mal*_*lio 5 java character-encoding apache-commons-httpclient

我在几个不同(但显然相同)的计算机上使用HttpClient(版本3.1)从URL读取UTF-8编码的JSON数据.

在所有的机器上,保存一个,它工作正常.我有一些西班牙语单词,它们的口音完整无缺.

一台计算机顽固地拒绝合作.尽管有一个Content-Type: application/json;charset=utf-8标题,它显然将数据视为ISO-8859-1 .

如果我用来curl从该计算机访问该URL,它可以正常工作.在每台其他计算机上,curl和基于HttpClient的程序都能正常工作.

我在每台机器上的common-httpclient.jar文件上做了一个md5sum:相同.

是否存在一些深入Linux的设置,可能会有所不同并且在弄乱我?还有其他任何理论,甚至可以去看看吗?

编辑:有些人要求提供更多细节.

最初我在一个复杂的Tomcat应用程序的内容深处遇到了问题,但我轻轻地调整了样本以检索有问题的URL,并且(幸运的是)有同样的问题.

这些是运行jdk1.7.0_45的Linux 2.6机器.

一个env命令产生一组变量.唯一一个远程看点的是LANG=en_US.UTF-8.

小智 5

你如何从HttpClient获得json响应数据?

如果以二进制形式(通过getResponseBodyAsStream()例如)将其恢复,然后将其转换为String而不指定charset,则结果取决于JVM的默认字符集.

您可以通过以下方式检查JVM默认字符集的值:

Charset.defaultCharset().name()
Run Code Online (Sandbox Code Playgroud)

这可能会在除了失败之外的所有机器上提供"UTF-8".