input is not proper UTF-8, indicate encoding(输入的是utf-8不正确表示的编码)

当两个系统间通讯出现'inputisnotproperUTF-8,indicateencoding'错误时,需要检查服务器(如Linux)的字符集、Java程序的字符编码以及XML报文头的编码是否一致。确保三者匹配可解决问题。若请求报文缺少XML头,可能因系统默认解析为UTF-8,需添加XML头指定GBK编码。修改Linux系统字符集涉及查看当前字符集、查找可用字符集、修改配置文件并使其生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个系统之间通讯时,遇到报错: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值