JS中的unicode


js采用UTF-16來對unicode進行編碼,在FFFF及更小的unicode碼中,UTF-16編碼與unicode碼是一模一樣的,所以'\uxxxx'直接根據unicode原碼表就能查出所需要的字符,無需轉換編碼。

當unicode碼大於FFFF時,utf-16就會引進標志位,用四個字節表示unicode編碼,此時UTF-16編碼就與我們查到的原unicode碼完全不一樣了。

而ES6中,可以使用'/u{xxxxx}' 直接根據unicode碼,輸出對應字符,無需轉化成utf-16:  (xxxx是unicode碼的16進制形式)

"\u{20BB7}"
// "𠮷"

上述字符,在ES6之前,只能通過轉換utf-16來輸出:

'\uD842\uDFB7'
//"𠮷"

 

補充:

charCodeAt()得到的是utf-16的編碼的十進制數,並不是unicode編碼,這一點很多文檔都寫錯了

utf-8是可變長的,兼容ascii碼,小於等於1字節時等同於unicode碼,大於1字節時會有標志位,也就不同於unicode碼

 

附:

UTF-16編碼以16位無符號整數為單位。我們把Unicode編碼記作U。編碼規則如下:
如果U<0x10000,U的UTF-16編碼就是U對應的16位無符號整數(為書寫簡便,下文將16位無符號整數記作WORD)。
如果U≥0x10000,我們先計算U'=U-0x10000,然后將U'寫成二進制形式:yyyy yyyy yyxx xxxx xxxx,U的UTF-16編碼(二進制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM