問題
在java中,一個字符等於多少字節?
或者更詳細的問:在java中,一個英文字符等於多少字節?一個中文字符等於多少字節?
答案
Java采用unicode來表示字符,java中的一個char是2個字節,一個中文或英文字符的unicode編碼都占2個字節,但如果采用其他編碼方式,一個字符占用的字節數則各不相同。
在 GB 2312 編碼或 GBK 編碼中,一個英文字母字符存儲需要1個字節,一個漢子字符存儲需要2個字節。
在UTF-8編碼中,一個英文字母字符存儲需要1個字節,一個漢字字符儲存需要3到4個字節。
在UTF-16編碼中,一個英文字母字符存儲需要2個字節,一個漢字字符儲存需要3到4個字節(Unicode擴展區的一些漢字存儲需要4個字節)。
在UTF-32編碼中,世界上任何字符的存儲都需要4個字節。
舉個例子:
java代碼如下:
String str = "測試test"; int byte_len = str.getBytes().length; int len = str.length(); System.out.println("字節長度為:" + byte_len); System.out.println("字符長度為:" + len);
如果編碼方式為GBK,對於字符串“測試test”,字符長度為6,字節長度為8。
如果編碼方式為UTF_8,對於字符串“測試test”,字符長度為6,字節長度為10。
注意:字符串的length()方法返回的是字符長度,一個漢子表示一個字符,一個字母也表示一個字符。
unicode和UTF_8有什么關系
UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。unicode的其他實現方式還包括UTF-16和UTF-32。
UTF-8的最大特點是,它是一種可變的編碼方式。
詳情請自行百度~
那么問題來了
說了這么多還是不明白,到底java中一個char表示幾個字節?請看下面解釋
public class Test { public static void main(String[] args) { String str= "測"; char x ='測'; byte[] byteStr=null; byte[] byteChar=null; try { byteStr = str.getBytes("utf-8"); byteChar = charToByte(x); } catch (Exception e) { e.printStackTrace(); } System.out.println("byteStr :"+byteStr.length); System.out.println("byteChar:"+byteChar.length); } public static byte[] charToByte(char c) { byte[] b = new byte[2]; b[0] = (byte) ((c & 0xFF00) >> 8); b[1] = (byte) (c & 0xFF); return b; } }
運行結果:
byteStr:3
byteChar:2
java是用unicode來表示字符,"測"這個中文字符的unicode就是2個字節。
String.getBytes(encoding)方法是獲取指定編碼的byte數組表示,
如果不指定encoding則取系統默認的encoding。
