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;
}