首先我要感謝這篇博客,卡了好久,看完下面這篇博客終於明白Unicode怎麼轉換成UTF-8了。python
https://blog.csdn.net/qq_32252957/article/details/83054183編碼
Unicode是一個字符集,Unicode是定長的都爲雙字節。spa
對於漢字來講Unicode佔有的字節比UTF-8佔用的字節少1個字節。Unicode爲雙字節,而UTF-8中漢字佔三個字節。.net
Unicode爲雙字節,而UTF-8中漢字佔三個字節。code
Unicode爲雙字節,而UTF-8中漢字佔三個字節。blog
U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
在多字節串中, 第一個字節的開頭"1"的數目就是整個串中字節的數目。而第一行中以0開頭,是爲了兼容ASCII編碼,爲一個字節,第二行就爲雙字節字符串,第三行爲3字節,如漢字就屬於這種,以此類推。(我的認爲:其實咱們能夠簡單的把前面的1的個數當作字節數)utf-8
爲了要將Unicode轉換爲UTF-8,固然要知道他們的區別到底在什麼地方。下面來看一下,在Unicode中的編碼是怎樣轉換成UTF-8的,在UTF-8中,若是一個字符的字節小於0x80(128)則爲ASCII字符,佔一個字節,能夠不用轉換,由於UTF-8兼容ASCII編碼。假如在Unicode中漢字「你」的編碼爲「u4F60」,把它轉換爲二進制爲100111101100000,而後按照UTF-8的方法進行轉換。能夠將Unicode二進制從地位往高位取出二進制數字,每次取6位,如上述的二進制就能夠分別取出爲以下所示的格式,前面按格式填補,不足8位用0填補。unicode
unicode: 100111101100000 4F60 utf-8: 11100100,10111101,10100000 E4BDA0
從上面就能夠很直觀的看出Unicode到UTF-8之間的轉換,固然知道了UTF-8的格式後,就能夠進行逆運算,就是按照格式把它在二進制中的相應位置上取出,而後在轉換就是所獲得的Unicode字符了(這個運算能夠經過「位移」來完成)。字符串