描述:Web 客户端,利用 HttpClient 调用银行接口,银行的要求是:以 GBK 格式发送报文。
情况:本地不管怎样调整编码格式,银行端接收到的中文总是处于乱码状态(英文和数字不乱码)。
经过大量的资料查询,找到一些比较有用的资料。比如:这里
由于调用银行接口,对于 IP 地址有限制,故本机并没有办法直接调用,必须要发送到服务器上才能正确调用。
由于银行要求以 GBK 发送报文,所以新开了一个 Eclipse ,将 WEB 工程的所有文件编码都更改成 GBK 。
System.getProperties().list(System.out);
String csn = Charset.defaultCharset().name();
System.out.println("默认编码格式 = " + csn);
利用以上代码,本地运行时控制台输出:默认编码格式 = GBK。说明了本地 JDK 默认编码格式为 GBK。
由于不能在本机调试银行接口,当发送到服务器(linux)之后,日志输出“默认编码格式 = UTF-8”,说明服务器 JDK 默认编码格式为 UTF-8.
在代码中对 HttpClient 的编码各种设置都没有效果后,想着是否是 JDK 默认编码格式造成的问题。
由于是 Web 工程,当 Tomcat 启动时候,可以对 JDK 进行参数的设置,于是找到了下面的代码:
set JAVA_TOOL_OPTIONS=-Dfile.encoding=GBK -Duser.language=en -Duser.country=US
JAVA_OPTS="-server -Dfile.encoding=GBK -Duser.language=en -Duser.country=US"
Windows 下,修改 $TOMCAT_HOME/bin/catalina.bat 文件,添加第一行的代码。
Linux 下,修改 $TOMCAT_HOME/bin/catalina.sh 文件,添加第二行代码。
添加完成上述代码后,启动 Tomcat 时,JDK 默认编码已经被更改成 GBK,当再次访问银行接口时,中文报文传送正确,银行接受乱码问题解决。