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編碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章