通过HTTP调用接口返回的中文,在本地调试时是正常的,但是在服务器上部分中文乱码。
操作系统:Windows Server 2008 R2 Enterprise
### HTTP请求代码
这边修改http请求的编码格式没有效果。
```java
//创建连接
URL url = new URL(strUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type", APPLICATION_JSON);
connection.connect();
//POST请求
DataOutputStream out = new DataOutputStream(
connection.getOutputStream());
out.writeBytes(json);
out.flush();
out.close();
//读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String lines;
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
sb.append(lines);
}
reader.close();
// 断开连接
connection.disconnect();
```
### 解决方案
在系统环境变量中增加一个变量,变量名为: `JAVA_TOOL_OPTIONS`, 变量值为:`-Dfile.encoding=UTF-8`
但是导致了另外一个问题:控制台打印的中文变成了乱码。
**=.=|||**
应该是因为Windows控制台的默认编码为936(也就是BGK,通过chcp命令查看)导致的。
### 参照
- [设置Java JDK的默认编码为UTF-8](http://blog.csdn.net/huangshaotian/article/details/7472662)
- [谜一样的Java编码和Windows编码](http://blog.csdn.net/cor_twi/article/details/53420256)