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...