一個漢字占幾個位元組是不是不太好記呢,編碼不一樣則占位元組位就不一樣。下面用一段簡短的代碼了解一下一個漢字占幾個位元組。
示例
String s = "情系IT";
try {
byte[] bytes1 = s.getBytes("gbk");
for (byte b : bytes1) {
System.out.print(Integer.toHexString(b & 0xff) " ");
}
System.out.println();
byte[] bytes2 = s.getBytes("utf-8");
for (byte b : bytes2) {
System.out.print(Integer.toHexString(b & 0xff) " ");
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
下面是運作結果:

解析
- Integer.toHexString(int a),這個是java API提供的一個方法,目的是傳回整數參數的字元串表示形式,作為16位中的無符号整數。
- 為什麼要用b & 0xff ?
- Integer.toHexString(int a),需要的是一個int類型的參數。
- 0xff代表的就是16進制的11111111。
- 我們知道byte是1個位元組,int是4個位元組,也就是要将8位轉換為32位。如果無符号位的話,我們直接補0即可。是以&0xff就是為了保證符号位。
- 舉個例子:-127轉為二進制為11111111,取反求補則為10000001,轉十六進制則為81,繼續轉成十進制,看成無符号數就會發現變成了129。
總結
根據結果我們可看出,
字元串是utf-8編碼,一個漢字三個位元組,一個字母一個位元組。
字元串是gbk編碼時,一個漢字兩個位元組,一個字母一個位元組。
如果想看其他編碼下的情況,可複制上面的代碼,将字元串進行其他編碼檢視即可。
注意:如果字元串不進行編碼,則預設為項目的編碼。