對UTF8編碼的初步認識

2021-03-31 12:42:21 字數 1469 閱讀 7715

網路中有很多地方都有採用utf8編碼,由於要編寫與郵件服務端有關的程式,而郵件服務端有些地方用到了utf8編碼,所以對它有了初步的認識!

它其實和unicode是同類,就是在編碼方式上不同!

首先utf8編碼後的大小是不一定,不像unicode編碼後的大小是一樣的!

我們先來看unicode的編碼:乙個英文本母 「a」 和 乙個漢字 「好」,編碼後都是占用的空間大小是一樣的,都是兩個位元組!

而utf8編碼:乙個英文本母「a」 和 乙個漢字 「好」,編碼後占用的空間大小就不樣了,前者是乙個位元組,後者是三個位元組!

現在就讓我們來看看utf8編碼的原理吧:

因為乙個字母還有一些鍵盤上的符號加起來只用二進位制七位就可以表示出來,而乙個位元組就是八位,所以utf8就用乙個位元組來表式字母和一些鍵盤上的符號。然而當我們拿到被編碼後的乙個位元組後怎麼知道它的組成?它有可能是英文本母的乙個位元組,也有可能是漢字的三個位元組中的乙個位元組!所以,utf8是有標誌位的!

當要表示的內容是 7位 的時候就用乙個位元組:0*******   第乙個0為標誌位,剩下的空間正好可以表示ascii 0-127 的內容。

當要表示的內容在 8 到 11 位的時候就用兩個位元組:110***** 10******   第乙個位元組的110和第二個位元組的10為標誌位。

當要表示的內容在 12 到 16 位的時候就用三個位元組:1110***** 10****** 10******    和上面一樣,第乙個位元組的1110和第

二、三個位元組的10都是標誌位,剩下的空間正好可以表示漢字。

以此類推:

四個位元組:11110**** 10****** 10****** 10******

五個位元組:111110*** 10****** 10****** 10****** 10****** 

六個位元組:1111110** 10****** 10****** 10****** 10****** 10****** 

.............................................

..............................................

明白了沒有?

編碼的方法是從低位到高位

現在就讓我們來看看例項吧!

黃色為標誌位

其它著色為了顯示其,編碼後的位置

unicode十六進製制

unicode二進位制

utf8二進位制

utf8十六進製制

utf8位元組數

b00001011

00001010b1

9d00010

011101

11000010

10011101

c2 9d

2a89e

1010

1000

10011110

1110

1010

10100010

10011110

ea a2 9e

3

對UTF8編碼的初步認識!

在網路中有很多地方都有採用utf8編碼,由於要編寫與郵件服務端有關的程式,而郵件服務端有些地方用到了utf8編碼,所以對它有了初步的認識!它其實和unicode是同類,就是在編碼方式上不同!首先utf8編碼後的大小是不一定,不像unicode編碼後的大小是一樣的!我們先來看unicode的編碼 乙個...

對UTF8編碼的初步認識!

在網路中有很多地方都有採用utf8編碼,由於要編寫與郵件服務端有關的程式,而郵件服務端有些地方用到了utf8編碼,所以對它有了初步的認識!它其實和unicode是同類,就是在編碼方式上不同!首先utf8編碼後的大小是不一定,不像unicode編碼後的大小是一樣的!我們先來看unicode的編碼 乙個...

對URL進行編碼(UTF 8)

最近由於專案需要,寫了乙個函式專門對url裡的中文引數行編碼,網頁那邊是用的utf 8編碼集的,所以在編碼之前必須把字串轉換成utf 8的再進編碼。大家都知道在url位址裡是不可傳中文字元的,因此如果你要url位址裡傳帶有中文字元的引數那就必須對它進行編碼。其實編碼是很簡單的,只是將字串中的每個字元...