前端日拱一卒D6——字符編碼與瀏覽器解析

前言

餘爲前端菜鳥,感姿式水平匱乏,難觀前端之大局。遂決定循前端知識之脈絡,以興趣爲引,輔以幾分堅持,望於己能解惑致知、於同道能助力一二,豈不美哉。前端

本系列代碼及文檔均在 此處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

相關文章
相關標籤/搜索