String and Byte



http://zhangyuefeng1983.blog.163.com/blog/static/1083372520126693524870/


1.string 轉 byte[]

byte[] midbytes=isoString.getBytes("UTF8");
//爲UTF8編碼
byte[] isoret = srt2.getBytes("ISO-8859-1");
//爲ISO-8859-1編碼
其中ISO-8859-1爲單字節的編碼
2.byte[]轉string
String isoString = new String(bytes,"ISO-8859-1");
String srt2=new String(midbytes,"UTF-8");

說明:
在網絡傳輸或其它應用中常常有同一的中間件,假設爲String類型。因此需要把其它類型的數據轉換爲中間件的類型。
將字符串進行網絡傳輸時,如socket,需要將其在轉換爲byte[]類型。這中間如果採用用不同的編碼可能會出現未成預料的問題,如亂碼。
下面舉個例子:
我們用socket傳輸String類型的數據時,常常用UTF-8進行編碼,這樣比較可以避免一個“中文亂碼”的問題。
發送端:
String sendString="發送數據";
byte[] sendBytes= sendString .getBytes("UTF8");
.......socket發送
接受端:
String recString=new String( sendBytes ,"UTF-8");

但是,這裏往往又會出現這樣一個問題。就是想要發送的數據本身就是byte[]類型的。
如果將其通過UTF-8編碼轉換爲中間件String類型就會出現問題
如:
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
String sendString=new String(  bytes ,"UTF-8");
byte[] sendBytes= sendString .getBytes("UTF8");
然後再發送
接受時進行逆向轉換
String recString=new String( sendBytes ,"UTF-8");
byte[] Mybytes=isoString.getBytes("UTF8");
這時Mybytes中的數據將是[50, 0, -17, -65, -67, 28, -17, -65, -67]

因此,需要採用單字節的編碼方式進行轉換
String sendString=new String(  bytes ,"UTF-8");   改爲       String sendString=new String(  bytes , "ISO-8859-1" );
byte[] Mybytes=isoString.getBytes("UTF8");  改爲   byte[] Mybytes=isoString.getBytes(  "ISO-8859-1" );
這樣所需要的字節就有恢復了。

1、字節數組轉換爲字符串

byte[] byBuffer = new byte[20];
... ...
String strRead = new String(byBuffer);
strRead = String.copyValueOf(strRead.toCharArray(), 0, byBuffer.length]);

2、字符串轉換成字節數組

byte[] byBuffer = new byte[200];
String strInput="abcdefg";
byBuffer= strInput.getBytes();

注意:如果字符串裏面含有中文,要特別注意,在android系統下,默認是UTF8編碼,一箇中文字符相當於3個字節,只有gb2312下一個中文相當於2字節。這種情況下可採取以下辦法:

byte[] byBuffer = new byte[200];
String strInput="我是字符串";
byBuffer= strInput.getBytes("gb2312");



int beginIndex = 0;
     byte[] ch = line.getBytes(def.getEncode());
     for(int a =0; a < clmSizeList.size(); a++){
      int length = clmSizeList.get(a);
      clmDataAry[a] = new String(ch, beginIndex, length);
      beginIndex = beginIndex + length;
     }

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