前言
餘爲前端菜鳥,感姿式水平匱乏,難觀前端之大局。遂決定循前端知識之脈絡,以興趣爲引,輔以幾分堅持,望於己能解惑致知、於同道能助力一二,豈不美哉。前端
本系列代碼及文檔均在 此處git
字符編碼
ASCII碼
- 一個字節,佔用後7位,128個字符,對應關係可查表
Unicode字符集
- 一個旨在包含全世界全部字符的集合
- Unicode字符集爲每一個字符定義了一個碼點,Unicode分區定義,其中碼點ox0000 - oxFFFF 對應爲基本平面(1個),碼點ox010000 - ox10FFFF 爲輔助平面(16個)。
- 每一個平面最多可存放2^16個字符
UTF-32 UTF-8 UTF-16
- Unicode只定義了字符->碼點的映射,並無說明如何儲存字符,字節序涉及到具體編碼方法。
- UTF-32是用4字節(32位,8個16進制位)來表示一個字符,能夠作到一一對應全部Unicode碼位,但顯然這樣很浪費空間
爲何是四字節不是三字節?算上全部平面也就最多到10FFFF,24位,按理說三字節就夠了。github
- UTF-8是一種變長的編碼方式,從1-4字節不等
- UTF-16
- 基礎平面字符用兩個字節表示,輔助平面用四個字節
- 輔助平面有最多16 * 2^16 = 2^20次個字符,對應到20個二進制位,則將其分紅兩部分,前10位映射在U+D800到U+DBFF,後10位映射在U+DC00到U+DFFF
JavaScript使用的編碼
-
USC-2函數
- UTF-16晚於js誕生...因此當時選用了USC-2,後來這東西被UTF-16取代了
- UCS-2使用兩個字節來對應碼點和表示字符,致使四字節的字符會被當作兩個兩字節字符處理,致使字符操做函數返回結果可能不對
-
ES6編碼
- 碼點表示:2字節
\u597D
, 4字節\u{1D306}
- 其餘改進:興趣不大...略過
HTML解析器
待補充code
雖發表於此,卻畢竟爲一人之言,又是每日學有所得之筆記,內容未必詳實,看官老爺們還望海涵。ip