两个系统之间通讯时,遇到报错:input is not proper UTF-8, indicate encoding

翻译:输入的是utf-8不正确表示的编码

解决方案:
1.首先检查服务器系统编码(linux系统服务器): echo $LANG 的字符编码是哪个

2.再检查自己Java程序的字符编码是用的哪个

3.再确认一下xml报文头的编码是哪个(创建xml的时候,字符集一定要和xml报文头的字符集一致)

三者相同,应该就没有问题了

【前两个可以选择修改服务器系统的字符集或者修改java代码的字符编码,第三个直接手动修改xml报文头即可】

还存在一种情况: 请求报文缺少XML头。
约定是GBK编码,且对方发送过来的十六进制的报文,显示的数据编码无误(通过终端汉字能显示),但是stderr仍报错:input is not proper UTF-8, indicate encoding**
可能是我们系统默认解析是UTF-8;故在请求报文加上XML头时( <?xml version="1.0" encoding="GBK"?> ),解析正常。

PS:linux系统修改字符集
1.echo $LANG #查看系统当前使用的字符集
2.locale -a|grep zh #locale -a可以显示系统所有支持的字符集,这条命令可以找出和中文相关的字符集,方便后面修改使用
3.vim /etc/sysconfig/i18n #更改字符集所在的配置文件,使用#号注释掉之前的英文字符集,重新添加一行LANG=zh_CN.gb18030
4.source /etc/sysconfig/i18n #执行这条命令,让前面的修改生效 ((注意改好之后重启一下系统))
5.echo $LANG #查看当前字符集是否已经修改成功

(临时修改LANG可以使用命令:export LANG=zh_CN.gb18030)

Logo

更多推荐