1、ASCII碼
美國人發明的字符編碼方式,用一個字節即8個bit來編碼字符,共可以編碼256個字符,但是它的最高位一直是0,僅僅編碼了128個符號
這些符號包含基本可見字符和32個不可見的控制符號
2、UniCode
unicode是一種全世界符號的編碼集合,它將全世界語言範圍內的所有字符符號都進行了一個唯一二進制表示方式。這些二進制的表示方式
可能需要1個字節、2個字節,甚至更多字節。unicode編碼僅僅規定了字符的二進制代碼,但是沒有約束這些二進制代碼是如何存儲的。因此
基於不同的存儲方式unicode存在許多變種。其中著名的就是utf-8
3、UTF-8
utf-8嚴格上說是unicode編碼的一種存儲實現方式而已。utf-8的編碼規則如下:
1)對於單字節的符號,字節的第一位設爲0,後面7位爲這個符號的unicode碼。因此對於英語字母,UTF-8編碼和ASCII碼是相同的。
2)對於n字節的符號(n>1),第一個字節的前n位都設爲1,第n+1位設爲0,後面字節的前兩位一律設爲10。剩下的沒有提及的二進制位,全部爲這個符號的unicode碼。
下表總結了編碼規則,字母x表示可用編碼的位。
Unicode符號範圍 | UTF-8編碼方式
(十六進制) | (二進制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
下面,還是以漢字“嚴”爲例,演示如何實現UTF-8編碼。
已知“嚴”的unicode是4E25(100111000100101),根據上表,可以發現4E25處在第三行的範圍內(0000 0800-0000 FFFF),因此“嚴”的UTF-8編碼需要三個字節,
即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然後,從“嚴”的最後一個二進制位開始,依次從後向前填入格式中的x,多出的位補0。這樣就得到了,“嚴”的UTF-8編碼是
“11100100 10111000 10100101”,轉換成十六進制就是E4B8A5。