Ho letto in alcuni punti che le stringhe JavaScript sono UTF-16 e in altri posti sono UCS-2. Ho fatto qualche ricerca per cercare di capire la differenza e ho trovato questo:stringhe JavaScript - UTF-16 vs UCS-2?
D: Qual è la differenza tra UCS-2 e UTF-16?
A: UCS-2 è obsoleto terminologia che si riferisce ad un'implementazione Unicode fino a Unicode 1.1, prima code point surrogati e UTF-16 sono stati aggiunti alla versione 2.0 dello standard. Questo termine dovrebbe ora essere evitato.
UCS-2 non definisce un formato dati distinto, poiché UTF-16 e UCS-2 sono identici ai fini dello scambio di dati. Entrambi sono a 16 bit e hanno esattamente la stessa rappresentazione di codice.
volte in passato un'implementazione è stato etichettato "UCS-2" per indicano che non supporta i caratteri supplementari e non interpreta coppie di code point surrogati come caratteri. Tale implementazione non gestiva l'elaborazione delle proprietà dei caratteri, i limiti del punto di codice , le regole di confronto ecc. Per i caratteri supplementari.
via: http://www.unicode.org/faq/utf_bom.html#utf16-11
Quindi la mia domanda è, è perché i metodi e gli indici dell'oggetto stringa JavaScript agiscono sui valori di dati a 16 bit invece di personaggi ciò che rendono alcune persone considerano UCS-2? E in tal caso, un oggetto stringa JavaScript orientato attorno ai caratteri invece dei blocchi di dati a 16 bit può essere considerato UTF-16? O c'è qualcos'altro che mi manca?
Edit: Come richiesto, ecco alcune fonti dicono stringhe JavaScript sono UCS-2:
http://blog.mozilla.com/nnethercote/2011/07/01/faster-javascript-parsing/ http://terenceyim.wordpress.com/tag/ucs2/
EDIT: Per tutti coloro che possono venire attraverso questo, assicurati di controllare questo link:
http://mathiasbynens.be/notes/javascript-encoding
Grazie per il link, la lingua delle specifiche sembra abbastanza chiara. Penso che il discorso di UCS-2 sia vecchio o basato sul metodo e sul supporto dell'indicizzazione per le coppie surrogate. – patorjk
Quindi, la specifica indica "Ogni valore intero nella sequenza di solito rappresenta una singola unità a 16 bit di testo UTF-16. Tuttavia, ECMAScript non pone alcuna restrizione o requisito sui valori eccetto che devono essere numeri interi senza segno a 16 bit . ", che equivale a dire che nei moderni programmi C ogni valore di carattere in un array di caratteri" di solito "rappresenta una singola unità di 8 bit di testo UTF-8, ma ovviamente affermando che le stringhe C" sono "UTF-8 sarebbe sbagliato. La semantica JavaScript fornisce è solo UCS-2; se si desidera il supporto UTF-16, è necessario farlo da soli, come da risposta di DMoses. –
UCS è la cosa con i numeri e sì UCS 2 è obsoleto, la versione corrente è UCS 4. UTF-8/-16/-32 sono modi per rappresentare gli array di oggetti UCS in bit. ;) – Philip