接口請求,上傳byte數組byte[]數據異常,負數變正數/負數變63


 

一、背景

最近項目中有個需求,就是需要把一個byte[]數組上傳到服務端。但是我發現發送的byte數組和服務端接收的數組不一樣,所有的正數在傳遞時正確,數組長度也沒變化,但是負數變成了63或者負數全部變成了正數,具體如下圖:

 

二、原因

  原因的話,網上有人解釋是這樣的:可能在傳輸前沒有指定編碼格式,默認字符編碼是UTF-8,而UTF-8是一種可變長度的編碼,所以原來的byte數組內容就被改變了,而下面的方法二轉換成字符串時指定編碼方式ISO-8859-1進行編碼,該編碼方式為單字節字符編碼,即在將byte[]轉String時,每一個字節轉化成一個字符,是一種不可變長度的編碼方式,所以byte數組在轉化前后內容不變!

 

三、解決辦法

1)用base64對byte數組進行編碼,通過網絡傳輸接收到數據之后,再用base64對其解碼得到byte數組

      byte[] byte2 = new byte[]{......};

      String str = Base64.encodeBase64String(byte2);

      ......HTTPS傳輸......

      byte[] byte = Base64.decodeBase64(str);

 

2)指定編碼進行傳輸

      byte[] byte3 = new byte[]{......};

      String isoString = new String(byte3,"ISO-8859-1");

      ......HTTPS傳輸......

      byte[] byte = str.getByte("ISO-8859-1");

3)使用文件傳輸,可以將byte[]數組當做一個文件file傳輸,但是需要設置請求體的編碼類型為:application/octet-stream,在服務端使用file.getBytes()得到byte[]數組

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM