java byte轉string 涉及到字節流中有中文


最近遇到一個問題,我用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中編碼格式相互轉換,還是比較麻煩的,我到現在也不是很清楚,只能遇到問題一點點解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM