Java中字元編碼和字串所佔位元組數 .

來源:互聯網
上載者:User

標籤:san   net   pre   exce   ref   nts   except   size   lan   

首 先,java中的一個char是2個位元組。java採用unicode,2個位元組來表示一個字元,這點與C語言中不同,C語言中採用ASCII,在大多數 系統中,一個char通常佔1個位元組,但是在0~127整數之間的字元對應表,unicode向下相容ASCII。而Java採用unicode來表示字元,一個中文或英文字元的unicode編碼都佔2個位元組,但如果採用其他編碼方式,一個字元佔用的位元組數則各不相同。

    在 GB 2312 編碼或 GBK 編碼中,一個英文字母字元儲存需要1個位元組,一個漢字字元儲存需要2個位元組。 在UTF-8編碼中,一個英文字母字元儲存需要1個位元組,一個漢字字元儲存需要3到4個位元組。在UTF-16編碼中,一個英文字母字元儲存需要2個位元組,一個漢字字元儲存需要3到4個位元組(Unicode擴充區的一些漢字儲存需要4個位元組)。在UTF-32編碼中,世界上任何字元的儲存都需要4個位元組。

   1、我的系統的預設編碼方式為GBK,因此對於字串 “你好hello”,

    如果調用length()方法返回其長度,得到的結果將為:7。該方法返回的是字串的字元數,無論是中文字元還是英文字元,都被看做是一個字元。

    如果將其轉換為byte數組,而後返回byte數組的長度,得到的結果將為:9。因為在GBK編碼中,中文佔2個位元組,而英文字元佔1個位元組。

    執行如下代碼,將得到如所示的輸出:

 

    public class Hel {          public static void main(String[] args){              String str = "你好hello";                  int byte_len = str.getBytes().length;                  int len = str.length();                  System.out.println("位元組長度為:" + byte_len);              System.out.println("字元長度為:" + len);              System.out.println("系統預設編碼方式:" + System.getProperty("file.encoding"));             }      }  

 

     輸出結果如:


    

  2、將編碼方式為改為utf-8,即執行如下代碼:

 

    public class Hel {          public static void main(String[] args)throws Exception{              String str = "你好hello";                  int byte_len = str.getBytes("utf-8").length;                  int len = str.length();                  System.out.println("位元組長度為:" + byte_len);              System.out.println("字元長度為:" + len);              System.out.println("系統預設編碼方式:" + System.getProperty("file.encoding"));             }      }  

 

    對於字串 “你好hello”,得到的輸出結果如下:


   

     此時得到的的byte數組的長度為:11。因為在utf-8編碼中,該中文字元佔了3個位元組,英文字元佔1個位元組。

    

    3、如果將編碼方式改為:utf-16,輸出結果如下:

    

      此時得到的的byte數組的長度為:16。因為在utf-16編碼中,該中文字元佔了3個位元組,英文字元佔2個位元組。


     3、如果將編碼方式改為:utf-32,輸出結果如下:

          此時得到的的byte數組的長度為:28。因為在utf-32編碼中,所有的字元均佔4個位元組。

Java中字元編碼和字串所佔位元組數 .

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.