Unicode了解一下 編碼演算法

2021-08-19 04:38:18 字數 2877 閱讀 9610

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 surrogatelow 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-2utf-16的子集。他用16位對bmp平面的所有碼位進行編碼。缺點是因為定長多乙個0x0,所以不相容ascii。

ucs-4編碼方式和utf-32相同。原本utf-32usc-4的子集,但後來的各種修改後,現在usc-4utf-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布局以後,子...