日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2024/1/8 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统传输过程中 中文点 · 对方无法解析的问题查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、寫這玩意的起因

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"這個編碼

總結

以上是生活随笔為你收集整理的系统传输过程中 中文点 · 对方无法解析的问题查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。