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

DerekZ95發表於2018-07-23

前言

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

本系列程式碼及文件均在 此處

字元編碼

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位,按理說三位元組就夠了。

  • 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解析器

待補充

雖發表於此,卻畢竟為一人之言,又是每日學有所得之筆記,內容未必詳實,看官老爺們還望海涵。

相關文章