Unicode與JavaScript詳解

來源:互聯網
上載者:User

標籤:標記法   自動識別   允許   文章   字串   簡單的   兩種方法   長度   解決   

參考文章:

http://www.ruanyifeng.com/blog/2014/12/unicode.html

Unicode源於一個很簡單的想法:將全世界所有的字元包含在一個集合裡,電腦只要支援這一個字元集,就能顯示所有的字元,再也不會有亂碼了。

它從0開始,為每個符號指定一個編號,這叫做"碼點"(code point)。

U+0000 = null

U+表示緊跟在後面的十六進位數是Unicode的碼點。

JavaScript語言採用Unicode字元集,但是只支援一種編碼方法。

JavaScript用的是UCS-2!

由於JavaScript只能處理UCS-2編碼,造成所有字元在這門語言中都是2個位元組,如果是4個位元組的字元,會當作兩個雙位元組的字元處理。JavaScript的字元函數都受到這一點的影響,無法返回正確結果。

JavaScript的下一個版本ECMAScript 6(簡稱ES6),大幅增強了Unicode支援,基本上解決了這個問題。

(1)正確識別字元

ES6可以自動識別4位元組的碼點。因此,遍曆字串就簡單多了。

for (let s of string ) {  // ...}

但是,為了保持相容,length屬性還是原來的行為方式。為了得到字串的正確長度,可以用下面的方式。

Array.from(string).length

(2)碼點標記法

JavaScript允許直接用碼點表示Unicode字元,寫法是"反斜線+u+碼點"。

‘好‘ === ‘\u597D‘ // true

但是,這種標記法對4位元組的碼點無效。ES6修正了這個問題,只要將碼點放在大括弧內,就能正確識別。

(3)字串處理函數

 ES6新增了幾個專門處理4位元組碼點的函數 

  • String.fromCodePoint():從Unicode碼點返回對應字元
  • String.prototype.codePointAt():從字元返回對應的碼點
  • String.prototype.at():返回字串給定位置的字元

 

(4)Regex

ES6提供了u修飾符,對Regex添加4位元組碼點的支援。

 

(5)Unicode正規化

有些字元除了字母以外,還有附加符號。比如,漢語拼音的ǒ,字母上面的聲調就是附加符號。對於許多歐洲語言來說,聲調符號是非常重要的。

 Unicode提供了兩種表示方法。一種是帶附加符號的單個字元,即一個碼點表示一個字元,比如ǒ的碼點是U+01D1;另一種是將附加符號單獨作為一個碼點,與主體字元複合顯示,即兩個碼點表示一個字元,比如ǒ可以寫成O(U+004F) + ˇ(U+030C)。

 

// 方法一‘\u01D1‘// ‘ǒ‘// 方法二‘\u004F\u030C‘// ‘ǒ‘

這兩種表示方法,視覺和語義都完全一樣,理應作為等同情況處理。但是,JavaScript無法辨別。 

‘\u01D1‘===‘\u004F\u030C‘  //false

ES6提供了normalize方法,允許"Unicode正規化",即將兩種方法轉為同樣的序列。

 ‘\u01D1‘.normalize() === ‘\u004F\u030C‘.normalize()  // true

 

Unicode與JavaScript詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.