目录

一、写这玩意的起因

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"这个编码

系统传输过程中 中文点 · 对方无法解析的问题查找相关推荐

  1. linux 更改 引导分区,Linux系统引导过程及引导修复

    0.Linux系统引导过程: 1.通电 2.bios初始化 3.磁盘引导阶段 4.grub2文件引导程序 5.内核加载 6.系统初始化镜像 7.系统启动级别 8.超级用户密码 以下内容是针对各过程会出 ...

  2. 笔记:黑客是如何窃取网络传输过程中信息的?

    每个高端的程序员都有成为黑客的潜质,这就要考虑到做技术是"善意"还是"恶意"了,之前看过一篇文章介绍全球著名的十大黑客,名单里有多少是程序开发大牛,其中不乏林纳 ...

  3. IP数据包在网络中的传输过程

    1. 获取目的IP 2. 判断源IP与目的IP是否在同一网段   -->   比较 IP & Genmask 是否相同 2.1 若在同一网段,则先查询arp缓存中是否有目的ip的mac地 ...

  4. Android系统在新进程中启动自定义服务过程(startService)的原理分析 (下)

    Step 10. ActivityManagerService.attachApplicationLocked 这个函数定义在frameworks/base/services/java/com/and ...

  5. volcanol_Linux_问题汇总系列_1_系统引导过程中到check filesystem时就无法继续引导问题解决方法。...

    在说问题之前,首先说一下我的用户名:volcanol.这里有点巧合,在上高中之前,我比较喜欢看火山喷发的景象,然后上了高中后 学习了火山这个单词:volcano, 然后加上我自己的姓的第一个字目是&q ...

  6. java sqlserver ssl_拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)...

    工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-C ...

  7. TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题

    TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题 1. 结论 2. 原因: 3. 例子 4. 参考: 1. 结论 mac变,ip不变. mac地址在同一个广播域传输过程中是不变 ...

  8. 计算机内部信号表现形式,信号是数据在传输过程中的什么的表现形式

    信号是数据在传输过程中的电信号的表现形式.如电信号可以通过幅度.频率.相位的变化来表示不同的消息.这种电信号有模拟信号和数字信号两类.信号是运载消息的工具,是消息的载体. 从广义上讲,它包含光信号.声 ...

  9. 图解数据在网络中的传输过程

    数据在网络中的传输过程 在计算机网络当中,数据是怎么样保证准确的从客户端发送到服务器端的,这是本文探究的重点. 下图是本文中使用的网络拓扑图,数据从客户端发送给服务器端. 客户端各层对数据的封装 ja ...

最新文章

  1. C_functions
  2. 第七章 右左法则----复杂指针解析
  3. java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
  4. 协同过滤算法 R/mapreduce/spark mllib多语言实现
  5. python单行箭头_python – 如何在matplotlib的曲线末端放置一个箭头?
  6. java实例变量可以被覆盖吗_Java继承覆盖实例变量
  7. Oracle 用户 对 表空间 配额(quota ) 说明
  8. 如何添加数据到session中
  9. setuptools安装_在Ubuntu 18.04系统上安装ERPNext ERP
  10. 我的LINUX之路----linux目录文件管理
  11. linux卸载amd软件命令,Ubuntu 16.04 apt终端命令的使用以及软件的安装和卸载
  12. ACM training贪心算法——坐椅子的背包问题
  13. Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
  14. 牛客练习赛21:A. 黑妹的游戏I
  15. 【知识索引】【C++入门】
  16. 从研发角度谈存储技术的学习
  17. java更改exif信息_照片EXIF信息的读取和改写的JAVA实现
  18. js得到今天日期、本周、本月、本季度、本年起始和结束日期
  19. 网络安全技术——网络地址转换(NAT)
  20. Word文档如何在方框里打勾?三招让你从入门到精通,工作效率翻倍

热门文章

  1. 西西里的美丽传说:美的绽放、挣扎与凋零
  2. xiecheng_spider携程民宿爬虫
  3. <Linux开发> ubuntu开发工具-Ubuntu测试网速及实时网速图
  4. Neo4j CQL 常用语句
  5. 笔记本当服务器显示器怎么连接,笔记本连接显示器,详细教您笔记本怎么连接显示器...
  6. 财报向好背后,特步的持续爆发力
  7. 第一个将Palette Mode引入VVC,阿里云在JVET会议上引起关注
  8. 【BZOJ1062】[NOI2008]糖果雨【二维树状数组】
  9. cpuz测试分数天梯图_CPU天梯图 Cinebench R15(多核)跑分
  10. echarts 实现柱状图左右横向对比显示