unicode和utf8編碼詳解

大家都知道計算機只能處理數字,所以在計算機中其他字符都需要先轉換爲數字0和1才能處理。每8個bit作爲一個字節,一個比特位表示一個一個字符,一個字節就能表示255個字符。


而一個字節足以表示所有的美國字符,所以美國人編寫了自己的ASCII編碼,作爲自己的統一編碼。但是漢字不止255個,所以中國用兩個字節表示一個漢字,編寫了Gb2312編碼作爲自己的統一編碼。同理,日本韓國等國家也都編寫了自己的標準編碼。但是各國的編碼標準不同,統一顯示就會出現亂碼。


由此,Unicode編碼產生了,將所有語言統一到一套編碼裏。


但是Unicode的編碼佔用的內存比較大,舉個例子。漢字“中”的Unicode編碼是兩個字節即16個比特位,而英文字母只有一個字節即8個比特位,所以Unicode在表示ASCII編碼的英文字符時會在ASCII編碼的基礎上在編碼前加上8個0.。所以Unicode編碼會比ASCII編碼多需要一倍的內存空間,傳輸時也同樣要多傳輸一倍的量。


看上去比ASCII編碼多需要一倍的空間,怎麼辦?將Unicode編碼轉換爲可變長度的utf-8(後面爲了方便會直接寫成utf8)編碼。utf8將用一個字節表示英文字符,用三個字節表示中文,比較偏僻的中文會用4-6個字節表示,如果需要傳輸大量的英文,utf8的作用就非常明顯了。


那麼問題又來了,如果計算機內部處理的是utf8的可變長編碼,就相對來說比較複雜了,畢竟是不定長的,不如處理定長的Unicode編碼方便快捷。所以計算機內部處理編碼時會牽扯到Unicode和utf8的轉換。怎麼說呢?計算機得到一串utf8編碼的字符,會先將其轉換爲Unicode編碼的字符,處理完了會再將其轉換爲utf8編碼的字符進行輸出。如下圖:



本文學習自imooc,錯誤理解之處望加指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章