字符、字節的概念及其區別


  不管是做為一個開發,還是一個測試,在實際工作中都會遇到這樣一個問題,比如:這個input框的長度是多少多少,然后你要去測試,輸入的內容是否符合需求,這里會涉及到兩個概念,那就是字符和字節。
  首先我們先看一下這個問題:“Java語言中字符串“學Java”所占的內存空間是幾個字節?”,要回答這個問題我們就必須先要清楚什么是“字節”什么是“字符”。
  字節(Byte):字節是通過網絡傳輸信息(或在硬盤或內存中存儲信息)的單位。字節是計算機信息技術用於計量存儲容量和傳輸容量的一種計量單位,1個字節等於8位二進制,它是一個8位的二進制數,是一個很具體的存儲空間。
  字符:人們使用的記號,抽象意義上的一個符號。 '1', '中', 'a', '$', '¥', ……

  談到字符就不得不提ANSIUNICODE兩種不同的編碼方式標准(對這兩種編碼方式標准在此我只簡單提一下,如果大家有興趣可以自己去查一下),ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。(對於字符來說ANSI以單字節存放英文字符,以雙字節存放中文等字符,而Unicode下,英文和中文的字符都以雙字節存放)Unicode碼也是一種國際標准編碼,采用二個字節編碼,與ANSI碼不兼容。 ANSI規定:一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一起時,就表示一個漢字,前面的一個字節(他稱之為高字節)從0xA1用到 0xF7,后面一個字節(低字節)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼里,我們還把數學符號、羅馬希臘的字母、日文的假名們都編進去了,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼,這就是常說的"全角"字符,而原來在127號以下的那些就叫"半角"字符了。從 UNICODE 開始,無論是半角的英文字母,還是全角的漢字,它們都是統一的"一個字符"!同時,也都是統一的"兩個字節"。

  我們可以簡單的記這樣一個結論:按照ANSI編碼標准,標點符號、數字、大小寫字母都占一個字節,漢字占2個字節。按照UNICODE標准所有字符都占2個字節。
我們再來看一下字符串,由於字符有2種編碼標准,所以字符串也分為2種。
  字符串(ANSI):在內存中,如果“字符”是以 ANSI 編碼形式存在的,一個字符可能使用一個字節或多個字節來表示,那么我們稱這種字符串為 ANSI 字符串或者多字節字符串。
  字符串(UNICODE):在內存中,如果“字符”是以在 UNICODE 中的序號存在的,那么我們稱這種字符串為 UNICODE 字符串或者寬字節字符串。
  由於不同 ANSI 編碼所規定的標准是不相同的,因此,對於一個給定的多字節字符串,我們必須知道它采用的是哪一種編碼規則,才能夠知道它包含了哪些“字符”。而對於 UNICODE 字符串來說,不管在什么環境下,它所代表的“字符”內容總是不變的。
  至此我們在上面提出的問題就迎刃而解了,因為在Java當中字符是采用Unicode編碼標准的,所以“學Java”這個字符串在Java語言中占10個字節。

  本文轉自:http://blog.sina.com.cn/s/blog_6ede15b10100nrxp.html,作者:JavaProgrammer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM