我在某些地方看過JavaScript字符串是UTF-16,在其他地方他們是UCS-2。我做了一些四處搜尋,試圖找出差異,並發現:JavaScript字符串 - UTF-16與UCS-2?
通過問:UCS-2和UTF-16有什麼區別?答:UCS-2是一種過時的術語,它指的是在代用品代碼點之前一直到Unicode 1.1的Unicode 實現,以及在標準的2.0版本中添加了UTF-16之前的 。現在應避免使用此術語 。
UCS-2沒有定義不同的數據格式,因爲UTF-16和UCS-2 對於數據交換的目的是相同的。兩者都是16位的,並且具有完全相同的代碼單元表示的 。
有時在過去,一個實現標記爲「UCS-2」爲 ,表示它不支持補充字符,而不是 將替代碼點對解釋爲字符。這種 實現將不處理字符屬性的處理, 代碼點邊界,校對等等的補充字符。
:http://www.unicode.org/faq/utf_bom.html#utf16-11
所以我的問題是,是不是因爲JavaScript字符串對象的方法和指標作用於16位數據值,而不是人物什麼讓一些人認爲這是UCS-2?如果是這樣,一個圍繞字符而不是16位數據塊的JavaScript字符串對象會被認爲是UTF-16嗎?還是有什麼我失蹤?
編輯:按照要求,這裏有一些人士說的JavaScript字符串是UCS-2:
http://blog.mozilla.com/nnethercote/2011/07/01/faster-javascript-parsing/ http://terenceyim.wordpress.com/tag/ucs2/
編輯:對於任何人誰可能會遇到這種情況,請看看這個鏈接:
http://mathiasbynens.be/notes/javascript-encoding
謝謝你的鏈接,規範的語言似乎很清楚。那麼我認爲,UCS-2談話要麼是舊的,要麼是基於代理對的方法和索引支持。 – patorjk 2012-01-03 18:23:43
因此,規範規定:「序列中的每個整數值通常代表UTF-16文本的單個16位單元,但ECMAScript不對該值施加任何限制或要求,但它們必須是16位無符號整數。「,這相當於在現代C程序中,字符數組中的每個字符值」通常「表示UTF-8文本的單個8位單元,但顯然聲明C字符串」是「UTF-8將是錯誤。 JavaScript提供的語義只有UCS-2;如果你想要UTF-16的支持,你必須自己做,如DMoses的答案。 – 2012-12-11 04:34:29
UCS是數字,UCS 2是過時的,當前版本是UCS 4. UTF-8/-16/-32是以位表示UCS數組的數組的方式。 ;) – Philip 2017-06-11 09:27:21