最近遇到一個問題,我用java寫了一個客戶端通過socket向服務器端發送消息,發送的內容是字節流,編碼格式是GBK,服務器在收到消息后,如果格式正確,會返回固定的消息格式,同樣也是字節流,編碼格式也是GBK。
現在問題來了,我怎么把字節流轉換為字符流,當然是要能顯示出中文。於是上網搜了一下,找到一篇博客,網址如下:http://bbs.csdn.net/topics/391939108,代碼如下:
import java.nio.charset.Charset;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
public class Test{
public static void main(String[] args){
String content = "Hello World.你好世界.";
byte[] bs = content.getBytes();
Charset charset = Charset.defaultCharset();
ByteBuffer buf = ByteBuffer.wrap(bs);
CharBuffer cBuf = charset.decode(buf);
System.out.println(cBuf.toString());
}
}
從代碼不難看出,主要是通過ByteBuffer和CharBuffer相互轉換,轉換之前需要設置字符的編碼格式,因為我是在中文Windows下開發,所以默認的編碼格式是GBK,如果你想要設置自己的編碼格式,可以調用Charset的forName函數,參數即編碼格式。
這里還有一個細節需要注意,即從字節到字符轉換時,不難想象當讀取到一個byte小於128時候,直接轉英文。當大於128時,因為是GBK編碼,所以需要兩個連續的字節。
java中編碼格式相互轉換,還是比較麻煩的,我到現在也不是很清楚,只能遇到問題一點點解決。
