记一次报文乱码处理

问题:本系统为代发薪平台,请求行内短信平台,报文发送接收编码均为GBK,发送接收报文均成功,但短信平台显示发出的短信中文为乱码。

分析过程:

可能原因1:短信平台做了加密处理,不明文展示短信内容。经与短信平台沟通,未做加密处理,此项排除

可能原因2:本地报文未转码。经排查,报文发送时其中中文内容确实未经转GBK,遂转GBK,方法如下:

String resourceStr = "您的注册验证码为663523";

String trans = new String(resourceStr.getBytes(Charset.forname("utf-8"),"GBK");

经转码处理后发现短信平台展示中文依旧为乱码。问题开始变得复杂起来。

经仔细排查本地系统报文发送代码,发现最终消息发送时,使用了socket,在最后send时,将已经打包好的报文package换成了utf-8数组,源代码为socket.send(package.getBytes("utf-8"));

遂将此处utf-8替换为"GBK",再次尝试发送服务。服务发送结果成功,但却又出现了报文接收超时。

遂陷入自我怀疑,难道不是这样改的,又苦苦思索,中间走了好多弯路。

后在项目经理启示下,注意到计算出来的前八位报文头长度,与打包好的报文实际长度不符,怀疑是长度不符导致短信平台解析超时,于是排查代码,发现计算八位报文长度时,是在utf-8编码下计算的报文长度,而发送过去的报文却是八位报文头+转GBK后的报文,导致短信平台根据八位报文长度解析报文时发生超时异常。至此,问题终于解决,记录一下,以备不时之需。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值