系统传输过程中 中文点 · 对方无法解析的问题查找
目录
一、写这玩意的起因
1、遇到问题
二、问题查找与解决
1、问题的出现
2、查找与分析
一、写这玩意的起因
1、遇到问题
工作中遇到个当时看不出错误的问题,解决后,就想写下来记录与分享下
二、问题查找与解决
1、问题的出现
一般来说工作的系统程序就接受请求,处理,发送返回结果三步。
当时程序写好之后,运行成功的,由于该交易没有需要处理,也就透传数据,所以就没有在意。没想到遇到报错,尝试多次后,发现是只要有个中文点—— ·(就这个点),只要有他对方就解析失败。与对方查了很久,我这边发送的内容看起来没有问题,他们解析失败,说是给他们的长度和实际报文长度不一样导致解析失败。
2、查找与分析
❶首先想到是否是通讯方式的问题。一想不管啥通讯方式肯定都使用这么些年了,就算有问题也修复了吧,不然也肯定有解决方法。排除
❷然后检查了数据,整理思路。接收到数据是平台解析的,查看解析后数据是没有问题的,自动计算的长度,应该没有问题,否则其他数据就应该也出问题。现在的问题是加了 · 就不行,其他的符号、中文、英文、数字对方都能正常解析,那么平台解析和算长度肯定是正确的。
❸从头到尾检查,发送的数据打印出来也对着的。只有长度问题了,猜想是否重新计算了长度,导致长度与内容无法匹配。但是想起,不管是接收还是发送解析计算都是同一个,不应该有问题。排除
❹没办法,只能加打印试问题在哪。
先发了一遍解析不了的报文,检查各个位置的打印
再发一遍去掉那个中文点的报文,检查各个位置的打印
对比后发现问题,两个报文进来时候,长度相差2
但是发送的时候转换格式后长度相差1
具体检查代码发现发送的方法,入参为 服务名,发送的内容byte数组和长度 三个。
中间有了类型转换处理
如上图,此处把byte[]转换为String
打印后发现长度差距变化了,本来长度差2,转换后长度差1
能想到的就是编码问题了于是修改为 new String(sendByte,"UTF-8")
运行后还是对方解析不了
于是也就只能求助百度了,找到了一篇文章
http://t.csdn.cn/2lD5dhttp://t.csdn.cn/2lD5d看过之后,先写了个mian方法试了下,确定编码不同可能会导致字节长度不同,于是改掉代码试着运行了下,解决了。
尝试的mian方法如下
public class test {public static void main(String[] args) throws UnsupportedEncodingException {
// String a = "大·二";
// System.out.println(a.length());
// byte[] b = a.getBytes();byte[] b = new byte[] {23,43,42,-23,-32,43};System.out.println(b.length);System.out.println("-----无------");String c1 = new String(b);System.out.println("c1=="+c1.length());byte[] d1 = c1.getBytes();System.out.println("byte[] d1=="+d1.length);System.out.println("-----ISO-8859-1------");String c2 = new String(b,"ISO-8859-1");System.out.println("c2=="+c2.length());byte[] d2 = c2.getBytes();System.out.println("byte[] d2=="+d2.length);System.out.println("-----UTF-8------");String c3 = new String(b,"UTF-8");System.out.println("c3=="+c3.length());byte[] d3 = c3.getBytes();System.out.println("byte[] d3=="+d3.length);System.out.println("-----GBK------");String c4 = new String(b,"GBK");System.out.println("c4=="+c4.length());byte[] d4 = c4.getBytes();System.out.println("byte[] d4=="+d4.length);}
}
运行结果如下
6
-----无------
c1==6
byte[] d1==10
-----ISO-8859-1------
c2==6
byte[] d2==8
-----UTF-8------
c3==6
byte[] d3==10
-----GBK------
c4==5
byte[] d4==7
最终使用 new String(b,"ISO-8859-1") 方法把byte[]转换成String 解决了问题
总之呢,若遇到byte[]转String时丢失字节的问题,您可以试下"ISO-8859-1"这个编码
系统传输过程中 中文点 · 对方无法解析的问题查找相关推荐
- linux 更改 引导分区,Linux系统引导过程及引导修复
0.Linux系统引导过程: 1.通电 2.bios初始化 3.磁盘引导阶段 4.grub2文件引导程序 5.内核加载 6.系统初始化镜像 7.系统启动级别 8.超级用户密码 以下内容是针对各过程会出 ...
- 笔记:黑客是如何窃取网络传输过程中信息的?
每个高端的程序员都有成为黑客的潜质,这就要考虑到做技术是"善意"还是"恶意"了,之前看过一篇文章介绍全球著名的十大黑客,名单里有多少是程序开发大牛,其中不乏林纳 ...
- IP数据包在网络中的传输过程
1. 获取目的IP 2. 判断源IP与目的IP是否在同一网段 --> 比较 IP & Genmask 是否相同 2.1 若在同一网段,则先查询arp缓存中是否有目的ip的mac地 ...
- Android系统在新进程中启动自定义服务过程(startService)的原理分析 (下)
Step 10. ActivityManagerService.attachApplicationLocked 这个函数定义在frameworks/base/services/java/com/and ...
- volcanol_Linux_问题汇总系列_1_系统引导过程中到check filesystem时就无法继续引导问题解决方法。...
在说问题之前,首先说一下我的用户名:volcanol.这里有点巧合,在上高中之前,我比较喜欢看火山喷发的景象,然后上了高中后 学习了火山这个单词:volcano, 然后加上我自己的姓的第一个字目是&q ...
- java sqlserver ssl_拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)...
工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-C ...
- TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题
TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题 1. 结论 2. 原因: 3. 例子 4. 参考: 1. 结论 mac变,ip不变. mac地址在同一个广播域传输过程中是不变 ...
- 计算机内部信号表现形式,信号是数据在传输过程中的什么的表现形式
信号是数据在传输过程中的电信号的表现形式.如电信号可以通过幅度.频率.相位的变化来表示不同的消息.这种电信号有模拟信号和数字信号两类.信号是运载消息的工具,是消息的载体. 从广义上讲,它包含光信号.声 ...
- 图解数据在网络中的传输过程
数据在网络中的传输过程 在计算机网络当中,数据是怎么样保证准确的从客户端发送到服务器端的,这是本文探究的重点. 下图是本文中使用的网络拓扑图,数据从客户端发送给服务器端. 客户端各层对数据的封装 ja ...
最新文章
- C_functions
- 第七章 右左法则----复杂指针解析
- java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
- 协同过滤算法 R/mapreduce/spark mllib多语言实现
- python单行箭头_python – 如何在matplotlib的曲线末端放置一个箭头?
- java实例变量可以被覆盖吗_Java继承覆盖实例变量
- Oracle 用户 对 表空间 配额(quota ) 说明
- 如何添加数据到session中
- setuptools安装_在Ubuntu 18.04系统上安装ERPNext ERP
- 我的LINUX之路----linux目录文件管理
- linux卸载amd软件命令,Ubuntu 16.04 apt终端命令的使用以及软件的安装和卸载
- ACM training贪心算法——坐椅子的背包问题
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
- 牛客练习赛21:A. 黑妹的游戏I
- 【知识索引】【C++入门】
- 从研发角度谈存储技术的学习
- java更改exif信息_照片EXIF信息的读取和改写的JAVA实现
- js得到今天日期、本周、本月、本季度、本年起始和结束日期
- 网络安全技术——网络地址转换(NAT)
- Word文档如何在方框里打勾?三招让你从入门到精通,工作效率翻倍
热门文章
- 西西里的美丽传说:美的绽放、挣扎与凋零
- xiecheng_spider携程民宿爬虫
- <Linux开发> ubuntu开发工具-Ubuntu测试网速及实时网速图
- Neo4j CQL 常用语句
- 笔记本当服务器显示器怎么连接,笔记本连接显示器,详细教您笔记本怎么连接显示器...
- 财报向好背后,特步的持续爆发力
- 第一个将Palette Mode引入VVC,阿里云在JVET会议上引起关注
- 【BZOJ1062】[NOI2008]糖果雨【二维树状数组】
- cpuz测试分数天梯图_CPU天梯图 Cinebench R15(多核)跑分
- echarts 实现柱状图左右横向对比显示