天天看點

一個漢字占幾個位元組你真的記住了嗎?

一個漢字占幾個位元組是不是不太好記呢,編碼不一樣則占位元組位就不一樣。下面用一段簡短的代碼了解一下一個漢字占幾個位元組。

示例

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();
        }           

下面是運作結果:

一個漢字占幾個位元組你真的記住了嗎?

解析

  1. Integer.toHexString(int a),這個是java API提供的一個方法,目的是傳回整數參數的字元串表示形式,作為16位中的無符号整數。
  2. 為什麼要用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編碼時,一個漢字兩個位元組,一個字母一個位元組。

如果想看其他編碼下的情況,可複制上面的代碼,将字元串進行其他編碼檢視即可。

注意:如果字元串不進行編碼,則預設為項目的編碼。