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".