編碼解碼UNICODE

2021-09-17 05:47:50 字數 1908 閱讀 1851

1.字符集vs字元編碼,編碼&解碼

character----->code point----->bytes

前兩者字符集的關係,可以統稱為codepoint;從codepoint到在計算機上的儲存形式,稱為編碼,反過來稱為解碼;

字符集:單個符號(character)對應乙個無符號數字(通常16進製表示,稱為**點code point),這種對應關係稱為字符集

字元編碼:**點與二進位制的對應關係稱為字元編碼,記憶體或磁碟儲存資料的形式為二進位制

2.歷史:ucs-2(兩個位元組定長編碼)---usc-4,utf-32(四個位元組定長編碼)----utf-16------utf-8

我國發布的:gb2312---gbk(gb2312的擴充套件)
3.gb2312:兩個位元組表示字元碼

相容ascii

乙個位元組中的1位區分,1表示gb2312字符集,0表示ascii字符集

最多可以表示94*94個字元,留有一部分擴充套件

編碼主要是euc-cn,相容ascii

4.unicode:4個位元組表示

utf-8,utf-16,變長編碼

utf-16,兩個位元組變長編碼(2,4)

utf-8,(1,2,3,4)

utf-32,定長編碼(4位元組)

5.bmp:

unicode 字元分為 17 組平面,每個平面擁有 2^16 (65,536)個碼位.有一些碼位沒有分配字元,也有一些碼位被保留,成為私有的,也有一些碼位是永遠被保留的,作為無字元的標誌。每乙個碼位都可以用 16 進製 xy0000 到 xyffff 來表示,這裡的 xy 是表示乙個 16 進製的值,從 00 到 10。

這第乙個位置(當 xy 是 00 的時候)被稱為 bmp (基本多文種平面, basic multilingual plane)。它包含了最常用的碼位從 u+0000 到 u+ffff。

6.js的utf-16(歷史遺留問題,js選用utf-16):

兩個位元組為乙個單元,length為1
7.bom(byte order mark)

utf-16 (be)    fe ff    254 255      big endian 大端

utf-16 (le) ff fe 255 254 little endian 小端

utf-16 與 utf-32 還有乙個不明顯的缺點。我們知道不同的計算機儲存位元組的順序是不一樣的,這也就意味著u+4e2d 在 utf-16 可以儲存為4e 2d,也可以儲存成2d 4e,這取決於計算機是採用大端模式還是小端模式,utf-32 的情況也類似。為了解決這個問題,引入了 bom (byte order mark),它是一特殊的不可見字元,位於檔案的起始位置,標示該檔案的位元組序。對於 utf-16 來說,bom 為u+feff(ff 比 fe 大 1),如果 utf-16 編碼的檔案以ff fe開始,那麼就意味著其位元組序為小端模式,如果以fe ff開始,那麼就是大端模式。

其他 utf-* 編碼的 bom 可以參考 representations of byte order marks by encoding

8.utf-8,utf-16,utf-32的選擇:

1)不考慮隨機訪問,utf-8,查詢第n個字元時間複雜度(o(n))

2)隨機訪問,只用65535之內的字元,utf-16,時間複雜度(o(1))

3)隨機訪問,超過了65535,utf-32,o(1)

9.詳解utf-8編碼

PHP解碼unicode編碼

function unicode decode name arr json decode json,true if empty arr return return arr str 方法二 轉換編碼,將unicode編碼轉換成可以瀏覽的utf 8編碼 pattern w u w i preg matc...

字元編碼 unicode編碼

1.ascii american standard code for information interchange 美國資訊交換標準 這是計算機上最早使用的通用的編碼方案。那個時候計算機還只是拉丁文本的專利,根本沒有想到現在計算機的發展勢頭,如果想到了,可能一開始就會使用unicode了。當時絕大...

unicode 編碼雜記

unicode,統一碼,可包含世界上所有國家的字元,每乙個字元用兩個位元組表示!utf 16,基本上就是unicode雙位元組編碼方式的實現,再加上乙個未來擴充套件需求的編碼機制 utf 8,unicode的不等幅編碼機制,英文保持不變,其他用兩個或三個位元組表示,如中文用三個位元組表示 ucs 2...