Tôi đã đọc ở một số nơi rằng chuỗi JavaScript là UTF-16 và ở những nơi khác, chúng là UCS-2. Tôi đã thực hiện một số tìm kiếm để tìm ra sự khác biệt và tìm thấy điều này:Chuỗi JavaScript - UTF-16 so với UCS-2?
Hỏi: Sự khác nhau giữa UCS-2 và UTF-16 là gì?
A: UCS-2 là thuật ngữ lỗi thời đề cập đến việc thực hiện Unicode lên đến Unicode 1.1, trước khi điểm mã thay thế và UTF-16 được thêm vào Phiên bản 2.0 của tiêu chuẩn. Thuật ngữ này giờ đây nên tránh .
UCS-2 không xác định định dạng dữ liệu riêng biệt, vì UTF-16 và UCS-2 giống hệt nhau cho mục đích trao đổi dữ liệu. Cả hai đều là 16 bit và có chính xác cùng một biểu diễn đơn vị mã.
Đôi khi trong quá khứ, triển khai đã được gắn nhãn "UCS-2" thành cho biết rằng nó không hỗ trợ các ký tự bổ sung và không diễn giải cặp điểm mã thay thế làm ký tự. Việc triển khai như vậy sẽ không xử lý việc xử lý các thuộc tính ký tự, ranh giới điểm mã, đối chiếu, v.v. cho các ký tự bổ sung.
qua: http://www.unicode.org/faq/utf_bom.html#utf16-11
Vì vậy, câu hỏi của tôi là, chẳng qua là vì phương pháp và chỉ số chuỗi của đối tượng JavaScript hành động dựa trên các giá trị dữ liệu 16-bit thay vì ký tự những gì làm cho một số người coi đó là UCS-2? Và nếu có, một đối tượng chuỗi JavaScript có định hướng xung quanh các ký tự thay vì các khối dữ liệu 16 bit được coi là UTF-16 không? Hoặc có cái gì khác tôi đang mất tích?
Edit: Theo yêu cầu, sau đây là một số nguồn tin nói rằng chuỗi Javascript là UCS-2:
http://blog.mozilla.com/nnethercote/2011/07/01/faster-javascript-parsing/ http://terenceyim.wordpress.com/tag/ucs2/
EDIT: Đối với bất cứ ai có thể đi qua này, hãy chắc chắn kiểm tra này liên kết:
http://mathiasbynens.be/notes/javascript-encoding
Cảm ơn bạn đã liên kết, ngôn ngữ của thông số có vẻ khá rõ ràng. Tôi nghĩ rằng UCS-2 nói chuyện hoặc là cũ hoặc dựa trên phương pháp và hỗ trợ lập chỉ mục cho các cặp thay thế. – patorjk
Vì vậy, đặc tả chỉ ra "Mỗi giá trị nguyên trong dãy thường đại diện cho một đơn vị 16-bit của văn bản UTF-16. Tuy nhiên, ECMAScript không đặt bất kỳ hạn chế hoặc yêu cầu nào về giá trị ngoại trừ chúng phải là số nguyên không dấu 16 bit ", tương đương với việc nói rằng trong các chương trình C hiện đại, mỗi giá trị ký tự trong một mảng ký tự" thường "đại diện cho một đơn vị 8-bit của văn bản UTF-8, nhưng rõ ràng nói rằng các chuỗi C" là "UTF-8 sẽ là sai rồi. JavaScript ngữ nghĩa chỉ cung cấp UCS-2; nếu bạn muốn hỗ trợ UTF-16, bạn phải tự mình làm như vậy, theo câu trả lời của DMoses. –
UCS là điều có các con số và UCS 2 có lỗi thời, phiên bản hiện tại là UCS 4. UTF-8/-16/-32 là các cách biểu diễn mảng các phép toán UCS theo bit. ;) – Philip