一個漢字占幾個字節是不是不太好記呢,編碼不一樣則占字節位就不一樣。下面用一段簡短的代碼了解一下一個漢字占幾個字節。
示例
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編碼時,一個漢字兩個字節,一個字母一個字節。
如果想看其他編碼下的情況,可復制上面的代碼,將字符串進行其他編碼查看即可。
注意:如果字符串不進行編碼,則默認為項目的編碼。
如果文章對您有幫助,請記得點贊關注喲~
歡迎大家關注我的公眾號:情系IT,每日推送技術文章供大家學習參考。