1. 程式人生 > >Android 中 -Java中byte[]轉String問題

Android 中 -Java中byte[]轉String問題

     最近的專案中要使用到把byte[]型別轉換成String字串然後通過網路傳送,但發現發現出去的字串和獲取的字串雖然是一樣的,但當用String的getBytes()的方法得到的byte[]跟原來的byte[]是不一樣的。

看如下程式碼:

bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };

String string = new String(bytes);

byte[] ret = string.getBytes();

檢視ret的資料發現是50, 0, -17, -65, -67, 28, -17, -65, -67,發現數據並不是原來的資料。

而使用如下程式碼就可以得到原來的資料:

bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };

StringisoString = new String(bytes, "ISO-8859-1");

byte[] isoret = isoString.getBytes("ISO-8859-1");

這是為什麼呢?原因是第一種方法預設是用UTF-8編碼來生成String的,用System.getProperty("sun.jnu.encoding")可以得到Android預設編碼是UTF-8。UTF-8是可變長度的編碼,原來的位元組陣列就被改變了。而ISO8859-1通常叫做Latin-1,Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字元,其中 0~127的字元與ASCII碼相同,它是單位元組的編碼方式,這樣第二種方式生成的String裡的位元組陣列就跟原來的位元組陣列一樣。在new String使用其他編碼如GBK,GB2312的話一樣也會導致位元組陣列發生變化,因此要想獲取String裡單位元組陣列,就應該使用iso8859-1編碼。