utf-8是一種字元長度可變的unicode編碼方式。他可以編碼unicode中的所有碼位,共 17∗
216−2048(b
mp.s
urro
gate
)=1112064
個 17∗2
16−2048(b
mp.s
urro
gate
)=1112064
個utf-8的規則很簡單:
我們來看一下unicode的編碼規則:
優點
對於ascii編碼的檔案完全相容,且只用單位元組就可以儲存。對於部分只用到ascii字元來說,儲存非常節省。
保證乙個字元的序列出錯不會影響另乙個字元的序列。非常適合網路傳輸
因為以位元組為編碼單元,無需考慮位元組順序的問題。所以也不需要bom
缺點
cjk文字分布在u+2e80
以上,屬於三位元組的範疇。比起gb2313
的雙位元組要多一半的儲存空間
因為是可變長度編碼,無法實現o(1)o
(1)的搜尋和隨機訪問。
utf-16的長度為雙位元組或四位元組的可變長度。雙位元組為unicode的bmp平面,四位元組通過high surrogate
和low surrogate
組合。可以組合出unicode的16個補充平面。字元覆蓋unicode所有碼位,數量為
65535
+1024
∗1024
−2048=2
16∗17−
2048(b
mp.s
urro
gate
)=1112064
65535
+1024
∗1024
−2048=2
16∗17−
2048(b
mp.s
urro
gate
)=1112064
轉換規則:
bmp平面中的碼位即小於u+10000
,數值直接等於碼位的數值,並使用雙位元組
bmp平面下的轉換過程
如$
u+0024
對應的二進位制是0000 0000 0010 0100
utf16編碼之後,和二進位制完全相同。不需要做任何轉換
最終得到的utf16編碼位0024
輔助平面的碼位即大於等於u+10000
,使用**對的模式進行編碼
前16位使用u+d800 ~ u+dbff
,後16位使用0xdc00 ~ 0xdfff
輔助平面演算法過程
如u+2bb62
對應的二進位制是0010 1011 1011 0110 0010
0x2bb62
減去0x10000
得到0x1bb62
=0001 0100 1011 0110 0010
前10位為00 0101 0010
=0x0082
加上0xd800
得到0xd882
為高**
後10位為11 0110 0010
=0x0362
加上0xdc00
得到0xdf62
為低**
得到utf16編碼為d882 df62
優點
原本unicode只有bmp平面的時候,utf-16為固定長度儲存。計算長度和索引非常方便。但是後來擴充套件unicode之後,強行加入**對才能解決問題。導致這個優勢不復存在。
和utf-8一樣,因為雙字元是成對的,高**低**或者低**高**。每個16位均有範圍,所以另乙個字元的一部分是這個字元的一部分的可能性是0。部分出錯可以立刻得知。乙個字元出錯不會影響後續字元。
缺點
不相容ascii
由於硬體和系統不同的關係,需要定義位元組序
最少需要使用2位元組,最多需要4位元組。相比utf-8的儲存大了很多。
定長儲存。每個字元都使用32位4位元組進行儲存。簡單暴力。
優點
定長儲存,計算長度和索引超級快速。然而unicode新標準的emoji中有zwj
的存在。這個優勢也會在以後逐漸消失了。
缺點
儲存空間太大。
ucs-2
是utf-16
的子集。他用16位對bmp平面的所有碼位進行編碼。缺點是因為定長多乙個0x0
,所以不相容ascii。
ucs-4
編碼方式和utf-32
相同。原本utf-32
是usc-4
的子集,但後來的各種修改後,現在usc-4
和utf-32
相當於相同的編碼方式。
Unicode了解一下 Emoji
emoji在日常生活中慢慢流行起來,在unicode中的數量也越來越多。目前unicode11.0中定義的emoji可以在這裡找到。多unicode型別的emoji引入,使得utf 32定長的隨機訪問的優勢喪失。emoji主要包含一下五種規則。單unicode 由單個unicode碼位組成。雙uni...
了解一下NTLM
ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...
了解一下 display flex
一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...